PRACTICAL GUIDE / 2026-09-26

Base64、URL 编码和中文乱码的区别

两种编码都能把特殊字符转换成便于传输的形式,但规则和安全含义完全不同。

01

用途不同

Base64 面向字节表示,URL Encode 面向网址组件中的保留字符。它们都不是加密,也不能保护密码。

02

避免乱码

  • 文本先统一为 UTF-8
  • 确认是否使用 Base64URL 的减号和下划线
  • 不要把完整 URL 当作单个参数整体编码
  • 检查内容是否被重复编码
03

空格规则

encodeURIComponent 会把空格转换为 %20,HTML 表单编码常用加号表示空格,解码时要按数据来源选择规则。

04

中文解码排查

  • 确认文本来自 UTF-8 字节,而不是 GBK 或任意二进制文件。
  • Base64URL 的 - 和 _ 可以解码;当前编码输出仍是标准 Base64,没有独立的 URL 安全编码选项。
  • 解码器会处理空白和缺失的等号填充,但非法字符、长度或非 UTF-8 字节仍可能失败。
  • 需要放进 URL 参数时,再按参数传输规则处理,不把 Base64 当成保密措施。
05

中文和缺失填充

“你好”的 UTF-8 Base64 为 5L2g5aW9;SGVsbG8 缺少末尾等号,仍可解码为 Hello。成功解码只表示字节可解释为文本,并不能证明来源可信。

06

编码与字符集不同

“中文”经 URL 组件编码为 %E4%B8%AD%E6%96%87;UTF-8 Base64 为 5Lit5paH。若输入的是 GBK 字节的 Base64,应回到原系统按正确字符集转码,反复点击解码不会修复乱码。