使用方法
- 在输入框中输入或粘贴文本。
- 所有编码随输入实时更新:二进制、八进制、十进制、十六进制、Base32 各变体、Base36 到 Base91,以及 uuencode 和 xxencode。
- 对比各项输出,找出最短的编码,或者只包含你能接受的字符的编码。
- 点击所需结果旁边的“复制”按钮。
一次输入,查看所有编码
本页的每种编码都会把同样的字节转换成不同的字符组合。把它们放在一起对比,是为项目挑选编码、辨认日志或配置文件中的陌生字符串、了解各格式差异的最快方式。文本按 UTF-8 转成字节后再编码,因此一个带重音的字母占 2 个字节,一个汉字占 3 个字节。所有计算都在浏览器中完成。
- 逐字节数字。二进制、八进制和十进制把每个字节单独写出,直观易读,但结果很长。
- 按位分组。十六进制、Base32(含 Base32hex、Crockford、z-base-32)、Base64 和 Base64URL 中每个字符代表固定的位数,所以输出长度只取决于输入长度。
- 大数转换。Base36、Base58 和 Base62 把整个输入视为一个大整数。输出长度会因数值不同而相差一个字符,开头的零字节会保留为开头的字符。
- 分块编码。Base45 把 2 个字节变成 3 个字符,Ascii85、Z85 和 Base85 把 4 个字节变成 5 个字符,Base91 则用每两个字符承载 13 或 14 位。
- 按行编码。uuencode 和 xxencode 是早期电子邮件和 Usenet 使用的格式,按行写出数据,每行开头有一个表示长度的字符。
输出长度对比
下表列出每种编码平均每个输入字节需要多少个字符,以及 32 字节的数据(例如 SHA-256 哈希或 Ed25519 公钥)编码后的长度:
| 编码 | 每字节字符数 | 32 字节编码后 |
|---|---|---|
| Base16(十六进制) | 2.0 | 64 |
| Base32 | 1.6 | 56(不填充时 52) |
| Base36 | 约 1.55 | 49 或 50 |
| Base45 | 1.5 | 48 |
| Base58 | 约 1.37 | 43 或 44 |
| Base62 | 约 1.34 | 42 或 43 |
| Base64 | 约 1.33 | 44(不填充时 43) |
| Base85 | 1.25 | 40 |
| Base91 | 约 1.23 | 39 或 40 |
从十六进制换成 Base64 可以缩短三分之一;再从 Base64 换成 Base91,只能再省大约 8%。
如何选择编码
最短的编码不一定最合适。Ascii85 的输出可能包含引号和反斜杠,Base91 可能包含双引号,放进 JSON、HTML 或命令行时往往需要转义。选择时先想清楚字符串要用在哪里:
- URL 和文件名:Base64URL、Base58 或 Base62。
- 需要朗读或手动输入:Crockford Base32 或 Base58,它们去掉了外形相近的字符。
- 不区分大小写的系统:十六进制、Base32 或 Base36。
- 二维码:Base45,只使用二维码字母数字模式支持的字符。
- PDF、Git、ZeroMQ 中的紧凑文本:Ascii85、Base85 或 Z85。
- 追求最广泛的兼容性:Base64,几乎所有编程语言和平台都支持。
常见问题
哪种编码的输出最短?
在本页的编码中,Base91 最紧凑,每字节约 1.23 个字符;其次是 Ascii85、Z85 和 Base85,每字节 1.25 个字符。Base64 每字节约 1.33 个字符,但支持范围广得多,所以通常是默认选择。
为什么输入长度相同,Base58 和 Base62 的结果长度却不一样?
它们把整个输入当作一个大数来转换,输出长度取决于数值大小,而不只是字节数。开头每多一个零字节,结果也会多一个前导字符。十六进制、Base32 和 Base64 对相同字节数的输入,输出长度总是一样的。
为什么二进制结果这么长?
二进制每个字节要写 8 位数字,再加上分隔符,长度至少是十六进制的四倍。它适合查看具体的每一位,不适合存储或传输数据。
我的文本会被上传到服务器吗?
不会。所有编码都由浏览器中的 JavaScript 计算,文本不会离开你的设备。