0

デコード結果

Ascii85

エンコード結果

Ascii85
種類

Ascii85について

Ascii85は、7ビットの印字可能なASCII文字を使用した符号化方式です。Base85とも呼ばれます。

Ascii85では、データを4バイトずつに分割し、それらを5文字のASCII文字に変換して表します。

Ascii85には様々な亜種が存在します。DenCodeでは、以下の3種類のAscii85に対応しています。オリジナルは btoa で、その後に Adobe や Z85 が登場しました。

概要
Z85ZeroMQで使用される。"\"(バックスラッシュ)や"'"(アポストロフィー)のようなエスケープが必要な文字を使用しないようにしたもの。
AdobeAdobeの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文字に変換する。末尾を「00」でパディングした場合は、Adobe/Z85の場合はパディング分を除外する。

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以降)