使い方
- テキストやバイト列を basE91 に変換するには「エンコード」を、basE91 をデータに戻すには「デコード」を選択します。
- データを入力または貼り付けるか、ファイルを開きます。生のバイト列を扱う場合は、「入力形式」を「16進数」に切り替えます。
- 結果は入力に合わせてリアルタイムに更新されます。デコード時は、「出力形式」で「テキスト」または「16進数」を選択します。
- 結果をコピーするか、ファイルとしてダウンロードします。
basE91 とは
basE91 は、Joachim Henke が考案したバイナリ・テキスト変換方式です。印字可能な ASCII 文字 95 種のうち、スペース、アポストロフィ '、ハイフン -、バックスラッシュ \ を除く 91 種を使います。
basE91 は、固定長のバイトブロック単位では処理しません。エンコーダーは入力のビットをバッファーにため、13 ビットずつ取り出します。13 ビットの値が 88 より大きければ、そのまま 2 文字で書き出します。88 以下であれば 14 ビット目も取り出します。91 進数の 2 文字で 91 × 91 = 8281 通りの値を表せるため、それでも収まります。つまり、13 ビットまたは 14 ビットごとに、ちょうど 2 文字になります。
その結果、サイズの増加は最大でも約 23% で、ゼロバイトが長く続くデータでは約 14% まで下がります。ランダムなデータや圧縮済みのデータは、上限に近くなります。
basE91 と他の方式の比較
| エンコード方式 | 文字数 | 出力サイズ |
|---|---|---|
| 16進数 | 16 | 入力の 2 倍 |
| Base58 | 58 | 入力の約 1.37 倍 |
| Base64 | 64 | 入力の 1.33 倍 |
| Base85 / Ascii85 | 85 | 入力の 1.25 倍 |
| basE91 | 91 | 入力の約 1.14~1.23 倍 |
自分のデータで実際の出力の長さを比べるには、すべてのエンコードに入力してみてください。
注意点
- エスケープ。アルファベットには、JSON やほとんどの文字列リテラルでエスケープが必要なダブルクォート
"と、HTML や XML でエスケープが必要な<、>、&が含まれます。basE91 は URL セーフではありません。 - 文字列全体をデコードする。ビットが文字の境界をまたいで続くため、basE91 文字列の途中から切り出した部分だけをデコードすることはできません。
- 対応状況。basE91 は IETF の標準ではありません。作者が C などの言語でリファレンス実装を公開しており、Python 向けの
base91パッケージなど、ほとんどのプラットフォームに移植版があります。
仕様
| 使用文字 | 印字可能な ASCII 文字 91 種 |
|---|---|
| 出力サイズ | 約 123% |
| パディング | なし |
| 規格 | basE91(Joachim Henke) |
| 大文字と小文字の区別 | あり |
エンコード例
| 入力 (UTF-8) | 出力 |
|---|---|
Hello, World! | >OwJh>}AQ;r@@Y?F |
Base64.is | xD7gXm^?t#5 |
你好 | I_5k7aPE |
よくある質問
basE91 は Base64 より小さくなりますか?
はい。Base64 では常に 33% 増えますが、basE91 の増加は最大でも約 23% で、ゼロバイトの多いデータではさらに少なくなります。1 MB のファイルなら、約 100 KB の節約になります。
basE91 ではどの文字を使いますか?
A-Z と a-z、数字 0-9、記号 !#$%&()*+,./:;<=>?@[]^_`{|}~" です。スペース、アポストロフィ、ハイフン、バックスラッシュは使いません。なぜ basE91 と表記するのですか?
作者がそのように表記しているためです。basE91 と Base91 は同じエンコード方式を指し、このページは元のアルゴリズムに従っています。
空白文字があるとデコードに失敗しますか?
いいえ。スペースや改行はアルファベットに含まれないため、このページのデコーダーは無視します。折り返された basE91 テキストも、そのまま貼り付けられます。