> maximum | efficiency | compression <

// 91 個の印字可能 ASCII 文字を使った Base91 エンコードで、テキストを最大限コンパクトに表現

[MAXIMUM]

高い圧縮効率

Base91 は一般的な Base 系エンコード(Base64 など)と比べてオーバーヘッドが小さく、約 23 % 程度に抑えられます.

[ASCII]

印字可能な文字のみ

91 個の印字可能 ASCII 文字のみを使用するため、テキストプロトコルやログにもそのまま載せやすい形式です。

[COMPACT]

スペース節約

Base64(約 33 % のオーバーヘッド)よりも短い文字列になり、ログ/レスポンス/メッセージのサイズ削減に役立ちます。

>> 技術情報

Base91 の仕組み:

Base91 は、印字可能な ASCII 文字 94 種類のうち 91 種類を利用し、2 文字ごとに 13〜14 ビットを詰め込むことで、高いエンコード効率を実現します。

例:

"Hello" → >OwJh>A

Base91 を選ぶ理由:

  • >テキストデータをできるだけ小さくしたい場合に最適
  • >Base64 の約 33 % に対し、Base91 は約 23 % のオーバーヘッド
  • >すべて印字可能 ASCII なので多くの環境でそのまま扱える
  • >帯域幅に制約のある API やログストレージで有利
  • >ログやメッセージの情報密度を高めたいときに便利

>> よくある質問

Base91 エンコードとは何ですか?

Base91 は、91 種類の印字可能 ASCII 文字を使って、バイナリデータをテキストとして表現するためのエンコード方式で、Base64 よりも高い圧縮効率を目指しています。

Base91 はどんなときに使うべきですか?

ネットワーク帯域やストレージに余裕がなく、テキストとしてやり取りしつつもサイズを最小化したい場合に便利です。例えばログや API レスポンスなどです。

Base91 は Base64 と比べてどれくらい効率的ですか?

一般的に Base64 は約 33 % のサイズ増加になりますが、Base91 はおよそ 23 % に抑えられます。同じデータでも Base91 の方が短い文字列になります。

Base91 の実装は多いですか?

Base64 ほど一般的ではありませんが、多くのプログラミング言語向けに Base91 の実装が公開されており、コンパクトなテキスト表現が必要な場面で利用されています。

// 比較

名前bits/charoverhead
Base164100%
Base32560%
Base64633.3%
Base856.4124.8%
Base916.5122.9%

// コード例

Alphabet  A-Z a-z 0-9 ! # $ % & ( ) * + , . / : ; < = > ? @ [ ] ^ _ ` { | } ~ "
Excluded  - \ '  and space           (3 of the 94 printable ASCII characters)
Bits      log2(91) = 6.508 bits/char  ->  8 / 6.508 = 1.229  (~23% overhead)
Python    pip install base91    base91.encode(b'Hello')
JS        npm i base91          base91.encode(...)

>> その他の質問

Q: basE91が使う91文字は何ですか?

A: basE91は印字可能なASCII 94文字(スペース除く)のうち91文字を使います。A–Z a–z 0–9 と ! # $ % & ( ) * + , . / : ; < = > ? @ [ ] ^ _ ` { | } ~ " で、-、\、' は除外されます。ダブルクォート " は含まれるため、JSONやシェルではエスケープが必要です。

Q: Base91のオーバーヘッドが約23%なのはなぜですか?

A: 91種類の記号では1文字あたり log₂(91) ≈ 6.508ビットを運びます。8 / 6.508 ≈ 1.229 で、約22.9%のオーバーヘッドです。比較するとBase32は60%、Base64は33%、Base85は25%です。

Q: Base91がBase64より優れるのはいつですか?

A: 1バイトを惜しむ場面、たとえば組み込みや制限の厳しいプロトコルだけです。Base91はURLセーフではなく、標準ライブラリになく、対応も少ないため、通常はBase64が適しています。

他の言語