← 所有文章
2 分钟阅读

Base64 和 Unicode:日常排查版解释

Base64 到底是什么,为什么中文有时会乱码,以及怎样不丢字符地编码和解码。

Base64 看起来像一段暗号,但它本质上只是传输格式。它把字节转成普通 ASCII 文本,让值可以安全地经过 JSON、环境变量、URL、邮件正文和日志。

这个区别很重要:Base64 不是加密,也不会隐藏敏感信息。任何人都可以解码。

最常见的错误

很多 Base64 片段坏掉,并不是 Base64 本身坏了,而是前一步出错:文本用错误的字符编码变成了字节。

如果只有英文,这个问题可能长期看不出来。一旦遇到中文、emoji、重音字符或中英混合内容,就很容易暴露。

这段文本:

Hello yueyekidl 你好

必须先变成 UTF-8 字节,再把这些字节编码成 Base64:

SGVsbG8geXVleWVraWRsIOS9oOWlvQ==

按 UTF-8 解码,原文会回来。按错误假设解码,就会出现乱码。

Base64 适合用在哪里

当一个系统只接受文本值,但你需要把字节传过去时,Base64 很有用:

  • JSON 响应里的短 payload。
  • 复制进配置文件的 token-like 值。
  • 放进日志或工单里的短二进制值。
  • 需要穿过不喜欢原始 Unicode 的系统的字符串。

它不适合用来隐藏秘密、压缩大内容,或者把文件硬塞进本该使用对象存储的地方。

更稳的排查顺序

Base64 值解不开时,按这个顺序检查:

  1. 文本是不是有效 Base64?复制时多出的空格或标点会破坏它。
  2. 原始内容是文本还是二进制?
  3. 如果是文本,当时是不是按 UTF-8 编码?
  4. 你是不是先解成字节,再把字节当文本处理?

最后一步很容易藏 bug。先是字节,后是文本。

本地试一下

Base64 编解码工具 测试值,不需要发送到服务器。粘贴 Unicode 文本,编码,再切换到解码,确认往返后还是同一段文本。

如果本地能往返,别的系统里却失败,问题大概率在那个系统的编码假设上。

相关阅读