上传文件
  1. base64hub
  2. 文本工具
  3. Base64 修复

修复 Base64

粘贴被解码器拒绝的 Base64。修复功能会撤销 JSON、URL、电子邮件和复制粘贴造成的常见损坏,列出每一处改动,并按你选择的格式给出干净的字符串。

免费 无需注册,不限次数 本地 不上传任何内容 修复 引号、转义、%3D、空格、填充 更新于 2026年10月27日

修复了什么

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何修复 Base64 字符串

  1. 把损坏的值粘贴到 要检查的 Base64。保留两边的引号、前缀和换行,工具需要靠它们判断发生了什么。
  2. 选择 输出格式:标准带填充、标准无填充、URL 安全带或不带填充、MIME(每行 76 字符,CRLF)或 PEM(每行 64 字符)。
  3. 查看 修复了什么。每项修复单独列出,你可以分清哪些是无害的清理,哪些改动可能丢了数据。
  4. 复制或下载结果,点击 校验结果 对它做完整检查,或点击 下载解码后的文件 保存字节。

能修复哪些问题

你粘贴的内容发生了什么修复结果
"SGVsbG8gd29ybGQ\u003d"带转义 = 的 JSON 字符串SGVsbG8gd29ybGQ=
SGVsbG8%3D在 URL 中被百分号编码SGVsbG8=
PDw/Pz8 Pg==+ 在查询字符串中变成了空格PDw/Pz8+Pg==
PDw_Pz8-PgURL 安全且无填充PDw/Pz8+Pg==
SGVsbG8gd29ybGQ填充被去掉了SGVsbG8gd29ybGQ=
SGVsbG8=V29ybGQ=两个值被拼接在一起SGVsbG9Xb3JsZA==(HelloWorld)
SGVsbG9=未使用的位不为零SGVsbG8=
Authorization: Basic …连同请求头名称一起复制只保留令牌

它还会去掉 data:…;base64, 前缀和 PEM 的 -----BEGIN …----- 行,剥掉普通引号,把字面的 \n 和 \/ 还原成字符(PHP 的 json_encode 默认会写出 \/),删除空白和换行,统一混用的 +/ 和 -_ 字母表,并修正 = 的数量。

对于拼接的值,每一段会分别解码,再把字节连起来;当程序把各自带填充的数据块一个接一个追加时,这样做是正确的。如果改为删掉中间的 =,后面所有的位都会错位,得到一堆乱码。

可能掩盖真正问题的修复

有两种修复会作为警告报告,因为它们靠的是猜测:

  • 已移除非法字符。 如果字符串中有 *、# 或零散的 Unicode 字符,工具会删除它,并列出删掉了哪些字符。数据中间的字符可能原本是一个被弄坏的真实符号,这种情况下,从那个位置开始解码出的字节仍然是错的。
  • 已丢弃一个多余字符。 除以 4 余 1 的长度不可能由任何编码器产生,所以要么多了一个字符,要么字符串被截断了。工具会丢掉最后一个字符,让其余部分可以解码;但如果值被截断了,文件末尾就已经丢失。被截断的图片通常底部是灰色或缺失的;被截断的 ZIP 打不开。

出现这两种警告时,请设法重新获取原始数据:一条没被截断的日志、完整的 API 响应,或者直接从邮件服务器取回的附件。

为什么简单的修复不够

网上常见的“修复” Base64 的代码片段,会处理空白、URL 安全字符和填充:

def fix_base64(s):
    s = "".join(s.split())
    s = s.replace("-", "+").replace("_", "/").rstrip("=")
    return s + "=" * (-len(s) % 4)

它能正确修复 SGVsbG8gd29ybGQ 和 PDw_Pz8-Pg。但如果输入 PDw/Pz8 Pg==(其中的 + 变成了空格),它会删掉空格,只剩 9 个数据字符。Python 随即报错:“number of data characters (9) cannot be 1 more than a multiple of 4”。JSON 转义、%3D、拼接的数据块和前缀也会这样漏网。这里的修复功能会逐一尝试每种修复,只有在结果长度有效时才会把空格换回加号。

更稳妥的长期办法是从源头解决:把 Base64 放进 URL 之前先做百分号编码,或者使用 Base64URL,并避免把它放到会重新换行或转义文本的地方。如果修复后的字符串解码出的内容仍然不对,Base64 错误指南 讲解了乱码和重复编码,Base64 解码器 可以显示字节。

常见问题

Python 报 "Incorrect padding" 怎么解决?

补 = 直到长度是 4 的倍数:s + "=" * (-len(s) % 4)。如果还报错,说明字符串还有别的损坏,比如空格或转义;粘贴到这里看看还有什么问题。

为什么我的 Base64 里有空格?

通常是 + 经过 URL 查询字符串或 HTML 表单时没有做百分号编码,接收方把它变成了空格。如果还原后长度有效,修复功能会把 + 放回去。

修复会丢失数据吗?

删除非法字符或末尾多余的一个字符时可能会,修复列表会明确说明。如果工具提示它因为数据被截断而丢弃了一个字符,请重新获取一份完整的原始数据,不要轻信这个结果。

Base64 末尾的 \u003d 是什么意思?

它是 = 的 JSON 转义。有些 JSON 库(比如 Gson)为了 HTML 安全会转义 =。JSON 解析器会自动把它还原;当你粘贴原始文本时,修复功能也会这样做。