Base85 编码器和解码器

Base85 会把 4 个字节压缩成 5 个 ASCII 字符,比 Base64 的「3 字节换 4 字符」比例更紧凑,因为它使用 85 个字符的字符集而不是 64 个。本工具实现的是 Adobe Ascii85 变体,即 PostScript 和 PDF 文件内部使用的变体。编码器始终用 <~~> 分隔符包裹输出;解码器接受带或不带分隔符的输入。

如何转换 Base85(Ascii85)

  1. 1

    选择编码或解码

    编码将原始字节转为 Ascii85;解码将 Ascii85 字符串转回字节。

  2. 2

    粘贴文本

    将要编码的字节或要解码的 Ascii85 字符串粘贴到输入框中。

  3. 3

    编码器按每 4 个字节分块

    每个 4 字节块会变成 5 个字符的 Base85 字符串。最后一块会先填充,再截去末尾多余部分。

  4. 4

    复制结果

    Ascii85 输出会用 `<~` 和 `~>` 分隔符包裹。重新粘贴即可解码,分隔符会自动去除。

大小开销对比

编码 每 4 字节字符数 相对二进制的开销
Hex 8 +100%
Base64 5.33(含填充时向上取整为 8) +37%
Base85 5 +25%
原始二进制 4 0

因此 1 MB 二进制会变成 1.25 MB 的 Base85、1.33 MB 的 Base64、2 MB 的 hex。

Ascii85 字符集

Ascii85(Adobe):ASCII 中 !u 的字符(33-117),并使用 z 作为 4 个零字节的简写。它是 PostScript 和 PDF 流的标准编码,形式为 <~...~>

Z85(ZeroMQ)和用于 IPv6 的 RFC 1924 字符集是对同一 85 字符思路的不同分配。本工具不实现它们,因此用这些变体编码的字符串在此处会解码错误。

计算原理

每 4 个字节会被读作一个大端(big-endian)32 位整数 N。输出的 5 个字符是 N 在 85 进制下的各位数字,最高位在前。85^5 = 4 437 053 125,大于 2^32,所以 4 个字节总能放进 5 个字符。

什么时候 Ascii85 很重要

用文本编辑器打开任意 PDF 并搜索 ASCII85Decode。Adobe 用它作为嵌入图片和字体的过滤器,使这些内容能通过 7 位传输(旧式传真系统)。同样的编码也出现在许多 PostScript 文件和适合邮件传输的二进制传输中。

特殊情况

  • 全零的 4 字节块:Ascii85 会把它编码为单个字符 z,而不是 !!!!!
  • 最后的不完整块:用零字节填充,并在末尾截去相应数量的输出字符。

常见问题

论输出更小,是的。论通用兼容性,则不是。Ascii85 含有 <>&" 等字符,在 XML、JSON 和 URL 中需要转义。大多数工具原生支持的是 Base64。

用于 PostScript 和 PDF 流中,编码区域用 <~~> 标记。PDF 阅读器和编辑器会自动处理这种编码。

不支持。它只实现 Adobe Ascii85。Z85(ZeroMQ)和用于 IPv6 的 RFC 1924 字符集对 85 个字符的分配方式不同,因此用这些变体编码的字符串在此处会解码错误。

它们按照 Ascii85 约定标记编码区域。编码器始终会添加,解码器在存在时会自动去除。也可以粘贴不带分隔符的字符串。

相关工具

此工具还提供其他语言版本