末尾的=是填充,不是原文字符。Base64用4个字符表示3个字节。最后剩1个字节时,带填充格式需要==;剩2个字节时需要=。
计算字节数,不是文字数
每个数据字符表示6位。3个字节共24位,正好对应4个字符。中文和表情符号在UTF-8中可能占多个字节。😀占4字节,编码为8J+YgA==。表格比较了1、2和3字节的输入。
恢复省略的填充
当格式允许省略填充时,先去掉空白,再计算长度除以4的余数。余2补==,余3补=,余0无需补充。余1表示无效或截断的数据,增加=不能修复。请检查API要求的格式。
为什么Zg成功而Zg=失败
Decodex为完全省略填充的Zg恢复填充并得到f,Zg==也有效。Zg=只有部分填充且总长度错误,所以被拒绝。A=AA和Zg===也会失败。不要反复增删=来掩盖复制错误。
转换此示例
| 文本 | UTF-8 bytes | Base64 | 填充 |
|---|---|---|---|
f | 1 | Zg== | == |
fo | 2 | Zm8= | = |
foo | 3 | Zm9v | — |
常见问题
所有Base64都以=结尾吗?
不是。当字节数是3的倍数时,无需填充。某些协议也会明确省略填充。
