使用方法
- 选择“编码”把文本或字节转换为 basE91,或选择“解码”把 basE91 还原为数据。
- 输入或粘贴内容,也可以打开文件。处理原始字节时请把输入切换为“十六进制”。
- 结果会随输入实时更新。解码时可选择文本或十六进制输出。
- 复制结果,或将结果下载为文件。
什么是 basE91?
basE91 是由 Joachim Henke 设计的二进制转文本编码。它使用 95 个可打印 ASCII 字符中的 91 个,只排除了空格、单引号 '、连字符 - 和反斜杠 \。
它不按固定的字节块处理数据。编码器把输入的位放进缓冲区,每次取 13 位:如果这 13 位的值大于 88,就写成两个字符;如果小于或等于 88,就再多取 1 位,凑成 14 位。之所以可行,是因为两个 91 进制字符可以表示 91 × 91 = 8281 个不同的值。所以每 13 或 14 位都正好变成 2 个字符。
因此,basE91 的体积开销最多约为 23%,对含有大量连续零字节的数据可低至约 14%。随机数据或已压缩的数据通常接近上限。
basE91 与其他编码的比较
| 编码 | 字符数 | 输出大小 |
|---|---|---|
| 十六进制 | 16 | 原数据的 2 倍 |
| Base58 | 58 | 约 1.37 倍 |
| Base64 | 64 | 1.33 倍 |
| Base85 / Ascii85 | 85 | 1.25 倍 |
| basE91 | 91 | 约 1.14 到 1.23 倍 |
想用自己的数据比较实际长度,可以把它输入 所有编码 工具。
使用时的注意事项
- 转义。字母表中包含双引号
",在 JSON 和大多数编程语言的字符串中需要转义;还包含<、>、&,在 HTML 和 XML 中需要转义。basE91 也不能直接用于 URL。 - 需要完整解码。由于位会跨越字符边界,从 basE91 字符串中间截取的一段无法单独解码。
- 支持情况。basE91 不是 IETF 标准。作者提供了 C 等语言的参考实现,大多数平台也有移植版本,例如 Python 的
base91包。
编码规格
| 字母表 | 91 个可打印 ASCII 字符 |
|---|---|
| 输出体积 | 约 123% |
| 填充 | 无 |
| 标准 | basE91(Joachim Henke) |
| 区分大小写 | 是 |
编码示例
| 输入 (UTF-8) | 输出 |
|---|---|
Hello, World! | >OwJh>}AQ;r@@Y?F |
Base64.is | xD7gXm^?t#5 |
你好 | I_5k7aPE |
常见问题
basE91 比 Base64 更省空间吗?
是的。Base64 固定增加 33%,而 basE91 最多增加约 23%,对零字节较多的数据还会更少。以 1 MB 的文件为例,大约可以节省 100 KB。
basE91 使用哪些字符?
字母
A-Z 和 a-z、数字 0-9,以及符号 !#$%&()*+,./:;<=>?@[]^_`{|}~"。空格、单引号、连字符和反斜杠不在其中。为什么写作 basE91?
这是作者给这种编码起的名字的写法。basE91 和 Base91 指的是同一种编码,本页采用的就是原始算法。
空格和换行会影响解码吗?
不会。空格和换行不属于字母表,本工具解码时会自动忽略它们,因此可以直接粘贴分行的 basE91 文本。