Base64、URL 编码、十六进制:三种编码别混用
Base64、URL 百分号编码与十六进制都能把内容变成「安全文本」,但目的完全不同。本文讲清三者分工、典型误用与选择依据。
核心要点
- Base64 把任意二进制变成纯文本,代价是体积增加约三分之一;URL 编码只对特殊字符做转义,其余保持原样。
- Base64 是编码而非加密,任何人都能解码,不能用来保护敏感内容。
- Base64 结果要放进网址或 JWT 时必须改用 Base64URL:把 + 和 / 换成 - 和 _,并去掉末尾的填充符。
把二进制或特殊字符变成「能安全通过文本通道」的形式,这类处理统称编码。Base64、URL 编码(百分号编码)与十六进制经常被混为一谈,但它们解决的其实是三件事,混用会导致收端还原失败或体积白白膨胀。
三者怎么区分
| 编码方式 | 解决什么问题 | 代价与注意 |
|---|---|---|
| Base64 | 把任意二进制(图片、证书、文件)变成纯文本 | 体积增加约 1/3,含 + / = 字符 |
| URL 编码 | 让空格、中文、& 等能安全放进网址 | 只对特殊字符转义,其余保持原样 |
| 十六进制编码 | 逐字节查看与核对二进制内容 | 体积翻倍,便于人读不便传输 |
| Base64URL | Base64 结果要放进 URL 或 JWT | 把 +/ 换成 -_ 并去掉填充符 |
| Unicode 转义 | 把中文写成 \uXXXX 写进源码 | 适合代码与配置,不适合传输 |
典型误用
- 把 Base64 当加密:它只是编码,任何人都能解码,不能保护敏感内容。
- 把 Base64 塞进网址:+/= 在 URL 里有特殊含义,应改用 Base64URL。
- 双重编码:已经百分号编码的串再做一次 URL 编码,% 会被转义成 %25,收端得多解一层。
- 用 Base64 省流量:体积反而增加约 33%,不如压缩后再传。
需要按字节核对内容时用文本转十六进制;邮件正文走 MIME 时可查Quoted-Printable 编码;短链与短 ID 场景多见Base62 编码。
常见问题
Base64 是加密吗?
不是。Base64 只是一种编码,把二进制数据映射成 64 个可打印字符,任何人都能解码。需要保密时应使用 AES 等对称加密或 HTTPS 传输加密。
为什么 Base64 之后的字符串放进网址会出问题?
标准 Base64 使用 + 和 / 两个字符,它们在 URL 中有特殊含义,末尾的 = 填充符也可能被截断。应改用 Base64URL 变体,用 - 和 _ 替代这两个字符,并去掉填充。
URL 编码和百分号编码是一回事吗?
通常指的是同一件事:把非 ASCII 字符与保留字符转换成 % 加两位十六进制的形式。区别在于所依据的字符集范围,百分号编码更严格,会把更多字符一并转义。
十六进制编码适合用来传输数据吗?
不适合。十六进制每个字节用两个字符表示,体积会翻倍;它的价值在于让二进制内容可被人工阅读与逐字节核对。
最后更新:2026-09-19