Ascii85 编解码器
把文本或 hex 字节编码成 Ascii85,或反向解码。包裹符、z 压缩和残缺尾组都明确处理,不靠猜。
编码:纯文本(UTF-8)或 hex 字节。解码:Ascii85,带不带 <~ ~> 包裹都行。输入有歧义时由模式开关裁决 —— 这个工具不猜。
什么时候会用到
- 你在实现 PDF 的 ASCII85Decode 过滤器,想拿一段流和已知可用的编码器对一下。
- PostScript 或 PDF 的生成方给了你 <~ … ~> 包裹的数据,你需要底下的字节。
- 你从协议里抓到一串 hex 字节,而另一个工具要的是 Ascii85 形式。
- 你在比较 Base64、Base32 与 Ascii85 的体积开销,需要的是真实字符串而不是百分比。
别的 Ascii85 工具差在哪里
很多编码器只输出裸字母表,于是带包裹的串被当成非法字符报错,而不是先拆掉包裹。
z 只在组边界上代表四个零字节。把它在任意位置展开的工具会让后面每个字节错位,却照样报告成功。
只剩一个字符的残缺尾组是解不出来的。硬补位再解码的工具会返回一些从来不在输入里的字节。
常见问题
Ascii85 和 Base85、Z85 是一回事吗?
不是。Ascii85(Adobe 变体)把四个字节映射成 ! 到 u 之间的五个字符,并允许用一个 z 代表四个零字节。Z85 用另一套字母表、要求输入长度是四的倍数、也没有 z。Base85 是一族名字,这个工具实现的是 Adobe 变体,并且会明说,不猜。
我的串为什么以 <~ 开头、以 ~> 结尾?
那是 PostScript 和 btoa 使用的 Adobe 包裹符,不属于数据本身。这个工具在输入时接受它、在输出时可以选择加上,但多数程序接口要的是裸串。
Ascii85 比 Base64 大多少?
Ascii85 比原始字节多 25%,因为四个字节变成五个字符;Base64 多 33%,因为三个字节变成四个。这个差别正是 PDF 与 PostScript 给内嵌流选 Ascii85 的原因。
单个 z 是什么意思,为什么有时是错误?
它代表四个零字节。只有处在两组之间时才是这个意思;出现在组内会改变后面每个字符的对齐方式,所以这个工具把它报成非法字符,而不是直接展开。