Base64 / URL / Hex 编码转换
三种常见编码的在线互转。按 UTF-8 处理,中文不会变乱码,全部在本地浏览器完成。
Base64
URL
Hex
说明
- Base64:按 UTF-8 字节序列编码,中文可直接转换,不会像
btoa()那样抛异常。 - URL 编码:使用
encodeURIComponent,适合处理查询参数;整条 URL 请不要整体编码。 - Hex:长度必须是偶数,允许带空格或冒号分隔,会自动忽略。
- Base64 只是编码,不是加密,不要用它保护敏感信息。
常见问题
- 为什么在别处编码的中文会乱码?
因为字符集不同。同一段中文,按 GBK 编码和按 UTF-8 编码得到的字节序列完全不同,Base64 只是把这串字节换个表示法,所以底层字节不同,结果自然不同。本站统一按 UTF-8 处理,这也是现在绝大多数系统的默认。如果你对接的老系统用 GBK,需要先用对应字符集转码再编码。 - URL 编码里
%20和+有什么区别?%20是空格的标准编码,在 URL 路径和查询串里都通用。+表示空格只适用于application/x-www-form-urlencoded这种表单提交的上下文(常见于老式表单和部分接口)。在路径里+就是加号本身,不会当空格解释,两者混用是常见的踩坑点。 - Base64 能当加密用吗?
不能。Base64 是可逆编码,任何人都能解码,它只解决"二进制数据如何放进纯文本通道"的问题,不提供任何保密性。看到一串eyJ...开头的内容,基本就是 Base64,直接解就行。 - Base64 和 Base64URL 有什么区别?
Base64URL 把标准字母表里的+换成-、/换成_,并去掉结尾的=填充,这样结果可以直接放进 URL 和文件名而无需再转义。JWT 用的就是 Base64URL。 - 为什么编码后的长度总是 4 的倍数?
Base64 把每 3 个字节重新组合成 4 个字符,不足 3 字节的用=补位,所以输出长度必然是 4 的倍数。数据量大约是原始数据的 1.33 倍,这也是 Base64 不适合传大文件的原因。