Base85エンコーダー・デコーダー

Base85は4バイトを5つのASCII文字に詰め込みます。64文字ではなく85文字の文字集合を使うため、Base64の「3バイトを4文字」という比率より高密度です。このツールは、PostScriptやPDFファイルの中で使われているAdobe Ascii85形式を実装しています。エンコーダーは出力を常に<~~>の区切り記号で囲み、デコーダーは区切り記号の有無を問わず入力を受け付けます。

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のバイナリは、Base85では1.25 MB、Base64では1.33 MB、hexでは2 MBになります。

Ascii85の文字集合

Ascii85(Adobe): ASCIIの!からuまで(33〜117)の文字に加え、4つのゼロバイトを表す短縮記号としてzを使います。PostScriptとPDFのストリームで標準的に使われ、<~...~>で囲まれます。

Z85(ZeroMQ)とRFC 1924のIPv6用文字集合は、同じ85文字の考え方を別の形で割り当てたものです。このツールはこれらの形式に対応していないため、それらの形式でエンコードされた文字列をここでデコードすると結果がおかしくなります。

計算の仕組み

4バイトごとに、ビッグエンディアンの32ビット整数Nとして読み取ります。出力される5文字は、Nを85進数で表したときの各桁で、上位の桁から並びます。85^5 = 4 437 053 1252^32より大きいため、4バイトは必ず5文字に収まります。

Ascii85が役立つ場面

PDFをテキストエディターで開き、ASCII85Decodeを検索してみてください。Adobeは、7ビット伝送(古いファクス風のシステム)を通り抜ける必要がある埋め込み画像やフォントのフィルターとして、これを使っています。同じエンコード方式は多くのPostScriptファイルや、メールで安全に送れるバイナリ転送でも使われます。

特殊なケース

  • すべてゼロの4バイトブロック: Ascii85では!!!!!ではなく1文字のzにエンコードします。
  • 末尾の半端なブロック: ゼロバイトで埋めてから、対応する数の出力文字を末尾で切り詰めます。

よくある質問

出力が小さいという意味では、はい。どこでも使えるという意味では、いいえ。Ascii85には<>&"のように、XML、JSON、URLでエスケープが必要な文字が含まれます。ほとんどのツールは標準でBase64に対応しています。

PostScriptとPDFのストリームの中です。エンコードされた領域は<~~>で囲まれます。PDFビューアーやエディターはこのエンコード方式を自動的に処理します。

いいえ。Adobe Ascii85のみに対応しています。Z85(ZeroMQ)とRFC 1924のIPv6用文字集合は85文字の割り当てが異なるため、それらの形式でエンコードされた文字列はここでは正しくデコードできません。

Ascii85の慣例に従ってエンコード領域を表すためです。エンコーダーは常にこれらを追加し、デコーダーは付いていれば自動的に取り除きます。区切り記号なしの文字列を貼り付けることもできます。

関連ツール

このツールは他の言語でも利用できます