> 最大 | 效率 | 压缩 <
// 使用 91 个可打印 ASCII 字符的 Base91 编码,为文本数据提供尽可能高的空间利用率
更高的压缩效率
与常见的 Base64 等编码相比,Base91 的开销约为 23%,在相同数据量下生成的字符串更短。
全部为可打印字符
仅使用 91 个可打印 ASCII 字符,适合用于日志、文本协议、调试输出等需要人眼阅读的场景。
显著节省空间
Base64 一般有约 33% 的体积膨胀,而 Base91 约为 23%,在大量请求、日志或消息传输中能累计节省大量字节。
>> 技术细节
Base91 的工作原理:
Base91 从 94 个可打印 ASCII 字符中选取 91 个,按特定算法将 13–14 bit 数据打包成两个字符输出,在文本可读与压缩效率之间取得平衡。
示例:
"Hello" → >OwJh>A
为什么使用 Base91:
- >希望在文本通道上尽可能减小编码体积
- >比 Base64(约 33% 开销)更高效的替代方案
- >使用可打印字符,适合日志、命令行工具和调试输出
- >在带宽或存储成本敏感的系统中长期节省流量
- >提升 API 响应、消息队列负载的整体数据密度
>> 常见问题
什么是 Base91 编码?
Base91 是一种二进制到文本的编码方案,使用 91 个可打印 ASCII 字符来表示二进制数据,相比 Base64 等传统方案可以生成更短的文本。
什么时候应该用 Base91 而不是 Base64?
当你需要在 HTTP、日志、消息系统等文本通道中尽可能降低数据体积时,Base91 是比 Base64 更合适的选择,尤其是在带宽或存储敏感的场景。
Base91 与 Base64 在尺寸上的差异有多大?
通常 Base64 会比原始数据增大约 33%,而 Base91 约为 23%。在大规模日志和 API 流量中,这种 10% 左右的差距会累计成明显的节省。
Base91 的生态是否成熟?
Base91 没有 Base64 那么普及,但已经有多种语言的实现,在对压缩效率敏感的项目中被广泛采用。
// 对比
| 名称 | bits/char | overhead |
|---|---|---|
| Base16 | 4 | 100% |
| Base32 | 5 | 60% |
| Base64 | 6 | 33.3% |
| Base85 | 6.41 | 24.8% |
| Base91 | 6.51 | 22.9% |
// 代码示例
Alphabet A-Z a-z 0-9 ! # $ % & ( ) * + , . / : ; < = > ? @ [ ] ^ _ ` { | } ~ "
Excluded - \ ' and space (3 of the 94 printable ASCII characters)
Bits log2(91) = 6.508 bits/char -> 8 / 6.508 = 1.229 (~23% overhead)
Python pip install base91 base91.encode(b'Hello')
JS npm i base91 base91.encode(...)
>> 更多问题
问:basE91 使用哪 91 个字符?
答:basE91 使用 94 个可打印 ASCII 字符(不含空格)中的 91 个:A–Z a–z 0–9 以及 ! # $ % & ( ) * + , . / : ; < = > ? @ [ ] ^ _ ` { | } ~ "。被排除的是 -、\ 和 '。双引号 " 包含在内,在 JSON 或 shell 中需要转义。
问:为什么 Base91 的开销约为 23%?
答:共 91 个符号,每个字符携带 log₂(91) ≈ 6.508 位。8 / 6.508 ≈ 1.229,即约 22.9% 的开销。对比:Base32 为 60%,Base64 为 33%,Base85 为 25%。
问:什么时候 Base91 比 Base64 更好?
答:只有在每个字节都很宝贵时,比如嵌入式系统或受限协议。Base91 不是 URL 安全的,标准库中没有,支持也很少。日常使用 Base64 更合适。