0

解码结果

Ascii85

编码结果

Ascii85
种类

关于 Ascii85

Ascii85 是使用 7 位可打印 ASCII 字符的编码方式。也被称为 Base85。

在 Ascii85 中,数据被每 4 个字节分为一组,并转换为 5 个 ASCII 字符来表示。

Ascii85 存在多种变体。DenCode 支持以下 3 种 Ascii85。起初是 btoa,后来出现了 Adobe 和 Z85。

概要
Z85用于 ZeroMQ。避免使用需要转义的字符,如 "\"(反斜杠) 或 "'"(撇号)。
Adobe用于 Adobe PostScript 和 PDF (Portable Document Format) 文件中的图像等编码。用 "<~" 和 "~>" 包围。
btoaUNIX 的 btoa 命令格式。过去曾用于二进制数据交换,但现在已不通用。用 "xbtoa Begin" 和 "xbtoa End" 行包围。

Ascii85 使用的 ASCII 字符如下。将 4 字节的值视为大端无符号整数,计算该值的 85 进制各数位(5 位),然后根据以下 ASCII 字符得出 Ascii85 转换结果。

ASCII 字符
Z850123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#
Adobe!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu
btoa!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu
(最初是从 " "(空格) 到 "t" 的字符,但因为有些邮件程序会删除末尾空格,后来被替换为从 "!" 到 "u" 的字符,去掉了空格。)

例如,将“Hello”用 Ascii85 转换如下。

1. 每 4 个字节分隔。不足 4 字节的在末尾用“00”填充。

48656C6C(16) 6F000000(16)  (Hell o)

2. 将每 4 个字节视为大端无符号整数,转换为 85 进制的各数位。

48656C6C(16)
= 1214606444(10)
= 23 * 854 + 22 * 853 + 66 * 852 + 52 * 85 + 49
6F000000(16)
= 1862270976(10)
= 35 * 854 + 57 * 853 + 33 * 852 + 65 * 85 + 26

3. 将 85 进制的各数位转换为 ASCII 字符。对于 Adobe/Z85,如果末尾填充了“00”,则去除填充部分。

23226652493557336526
Z85nm=QNzV
Adobe87cURDZ
btoa87cURDZBb;

4. 连接所有字符作为 Ascii85 转换结果。Adobe 用 "<~" & "~>" 包裹,每 80 个字符换行。btoa 用 "xbtoa Begin" & "xbtoa End" (包括数据长度和校验和等) 包裹,每 78 个字符换行。

转换结果
Z85nm=QNzV
Adobe<~87cURDZ~>
btoaxbtoa Begin
87cURDZBb;
xbtoa End N 5 5 E 42 S 1f9 R a9f

此外,还定义了一些缩写形式。

缩写形式
Z85
Adobe00000000(16) -> z
btoa00000000(16) -> z
20202020(16) -> y (btoa v4.2及以后)