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及以後)