Base91 编码解码

将文本、十六进制字节或文件转换为 basE91,也可以反向解码。basE91 用 91 个可打印 ASCII 字符表示二进制数据,结果比 Base64 和 Base85 更短。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 选择“编码”把文本或字节转换为 basE91,或选择“解码”把 basE91 还原为数据。
  2. 输入或粘贴内容,也可以打开文件。处理原始字节时请把输入切换为“十六进制”。
  3. 结果会随输入实时更新。解码时可选择文本或十六进制输出。
  4. 复制结果,或将结果下载为文件。

什么是 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 倍
Base5858约 1.37 倍
Base64641.33 倍
Base85 / Ascii85851.25 倍
basE9191约 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.isxD7gXm^?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 文本。