字符不是字节 · 字节也不是 Base64 符号
先弄清原始字节,再谈 Base64。
Base64 不认识“中文”或 emoji。它先接收按 UTF-8 等字符编码生成的字节,再把每 6 bit 映射为可打印 ASCII。解码则只还原字节,能否读成文本取决于双方约定的字符编码。
字符
A · 码 · 🔧人看到的内容
UTF-8 字节
41 · E7 A0 81 · F0 9F 94 A7真正进入 Base64 的数据
6-bit 分组
010000 011110 011110 …每 24 个输入 bit 分成 4 组
Base64 符号
Qeegg…便于文本通道传输的 ASCII
两套 RFC 字母表
只替换两个符号,协议含义却不能混用。
Shared 62 symbols · A–Z · a–z · 0–9+-+ 在 URL 或表单中可能有特殊含义
/_/ 会被当作路径分隔符
=常被省略是否可省略由上层协议决定
Base64base64url转换前必须确认使用哪种变体
padding 工作台
末尾不足 3 字节时,才需要等号补位。
4 个符号无需 padding3 个符号 + =1 个 =2 个符号 + ==2 个 =规范编码要求未使用的 pad bits 为 0。有些协议允许省略末尾 =,但长度除以 4 余 1 始终不可能构成有效 Base64。
解码结果分流
Base64 解码成功,只能说明拿到了字节。
UTF-8 文本
48 65 6C 6C 6F用严格 UTF-8 解码器还原字符
二进制数据
00 FF A3 10 …展示字节,不用替换字符伪造“文本”
已知文件签名
89 50 4E 47 …可能是 PNG,仍需按真实格式校验
Data URL
data:image/png;base64,…前缀提供媒体类型,它不是 Base64 payload
严格校验清单
遇到歧义输入,应指出具体原因。
输入含 #不属于所选 Base64 字母表
QUI===padding 过多或位置错误
QU JD严格模式拒绝内部空白
a+b/cBase64URL 模式混入标准字母表
A长度除以 4 余 1,不可能有效
pad bits 非零可以还原字节,但不是规范编码
BASE64 不是加密
改变表示方式,不提供机密性或完整性。
任何拿到内容的人都能还原字节。
数据可以被修改后重新编码。
不计外层协议,每 3 个输入字节通常变成 4 个输出字符。