You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Base64编码与解码结果不一致问题求助

解决Base64重新编码与初始字符串不匹配的问题

一、核心原因:初始字符串是URL编码后的Base64

你手里的初始Base64字符串已经做了URL转义处理:%3D是Base64填充字符=的URL编码。而你用Python重新编码得到的是标准Base64格式(直接带==),自然和转义后的初始字符串不一样。

比如base64_str2的原始值eyJzZWN0aW9uX29mZnNldCI6MCwiaXRlbXNfb2Zmc2V0IjowLCJ2ZXJzaW9uIjoxfQ%3D%3D,本质就是标准Base64字符串eyJzZWN0aW9uX29mZnNldCI6MCwiaXRlbXNfb2Zmc2V0IjowLCJ2ZXJzaW9uIjoxfQ==把==替换成了%3D%3D(URL转义)。

解决方法:对重新编码后的Base64做URL转义

在Python里可以用urllib.parse.quote实现:

import base64
from urllib.parse import quote

base64_str2_decoded = '{"section_offset":0,"items_offset":0,"version":1}'
# 先转成标准Base64字符串,再做URL编码
recoded_str2 = base64.b64encode(bytes(base64_str2_decoded, 'utf-8')).decode('utf-8')
url_encoded_recoded = quote(recoded_str2)
print(url_encoded_recoded)
# 输出:eyJzZWN0aW9uX29mZnNldCI6MCwiaXRlbXNfb2Zmc2V0IjowLCJ2ZXJzaW9uIjoxfQ%3D%3D

二、关于base64_str1解码后多出的'7'

你用在线工具解码base64_str1得到的结果末尾多了个7,这是在线工具的错误。标准Base64解码eyJzZWN0aW9uX29mZnNldCI6MiwiaXRlbXNfb2Zmc2V0IjozNiwidmVyc2lvbiI6MX0=(把%3D还原成=后),正确结果应该是{"section_offset":2,"items_offset":36,"version":1},没有末尾的7。

如果要正确还原base64_str1,需要先把URL转义的%3D还原成=,再解码:

from urllib.parse import unquote
import base64

base64_str1 = 'eyJzZWN0aW9uX29mZnNldCI6MiwiaXRlbXNfb2Zmc2V0IjozNiwidmVyc2lvbiI6MX0%3D'
# 先URL解码还原成标准Base64
original_b64 = unquote(base64_str1)
# 再Base64解码
decoded = base64.b64decode(original_b64).decode('utf-8')
print(decoded)
# 输出:{"section_offset":2,"items_offset":36,"version":1}

内容的提问来源于stack exchange,提问作者DouxDoux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:10:41