使い方
- 入力欄にテキストを入力または貼り付けます。
- 入力に合わせてすべてのエンコード結果がリアルタイムで更新されます。対象は 2進数、8進数、10進数、16進数、Base32 の各種類、Base36 から Base91 まで、そして uuencode と xxencode です。
- 出力を比べて、最も短いものや、使用できる文字だけで構成されたものを選びます。
- 必要な結果の横にある「コピー」をクリックします。
1 つの入力からすべてのエンコードを生成
このページの各エンコード方式は、同じバイト列をそれぞれ異なる文字の組み合わせに変換します。並べて比較すると、プロジェクトで使うエンコード方式を選んだり、ログや設定ファイルで見つけた文字列の正体を見分けたり、形式ごとの違いを理解したりするのに最も手早い方法です。テキストは UTF-8 のバイト列としてエンコードされるため、アクセント付きの文字は 2 バイト、漢字やかなは 3 バイトになります。処理はすべてブラウザ内で行われます。
- 1 バイトずつ数値で表す方式。2進数、8進数、10進数は、各バイトを個別に書き出します。読みやすい反面、長くなります。
- ビットグループ方式。16進数、Base32(Base32hex、Crockford、z-base-32 を含む)、Base64、Base64URL は 1 文字に一定のビット数を割り当てるため、出力の長さは入力の長さだけで決まります。
- 多倍長整数方式。Base36、Base58、Base62 は、入力全体を 1 つの大きな整数として扱います。値によって長さが 1 文字ほど変わることがあり、先頭のゼロバイトは先頭の文字として保持されます。
- ブロック方式。Base45 は 2 バイトを 3 文字に、Ascii85、Z85、Base85 は 4 バイトを 5 文字に変換し、Base91 は 2 文字ごとに 13 または 14 ビットを詰め込みます。
- 行単位の方式。uuencode と xxencode は、かつて電子メールや Usenet で使われていた形式です。データを行単位で書き出し、各行の先頭に長さを表す文字を置きます。
出力サイズの比較
各エンコード方式が入力 1 バイトあたりに必要とする文字数と、SHA-256 ハッシュ値や Ed25519 公開鍵のような 32 バイトの値をエンコードしたときの長さは次のとおりです。
| エンコード方式 | 1 バイトあたりの文字数 | 32 バイトをエンコードした長さ |
|---|---|---|
| Base16(16進数) | 2.0 | 64 |
| Base32 | 1.6 | 56(パディングなしで 52) |
| Base36 | 約 1.55 | 49 または 50 |
| Base45 | 1.5 | 48 |
| Base58 | 約 1.37 | 43 または 44 |
| Base62 | 約 1.34 | 42 または 43 |
| Base64 | 約 1.33 | 44(パディングなしで 43) |
| Base85 | 1.25 | 40 |
| Base91 | 約 1.23 | 39 または 40 |
16進数から Base64 に変えると、長さは 3 分の 1 短くなります。さらに Base64 から Base91 に変えても、短くなるのは約 8% にとどまります。
エンコード方式の選び方
出力が最も短いものが最適とは限りません。Ascii85 は引用符やバックスラッシュを、Base91 はダブルクォートを含むことがあるため、どちらも JSON、HTML、シェルコマンドの中ではエスケープが必要になる場合があります。文字列をどこで使うのかを考えて選んでください。
- URL やファイル名:Base64URL、Base58、Base62。
- 読み上げや手入力:見間違えやすい文字を除いた Crockford Base32 または Base58。
- 大文字と小文字を区別しないシステム:16進数、Base32、Base36。
- QR コード:QR コードの英数字モードで使える文字だけで構成される Base45。
- PDF、Git、ZeroMQ でのコンパクトなテキスト表現:Ascii85、Base85、Z85。
- 最大限の互換性:ほぼすべての言語とプラットフォームが対応している Base64。
よくある質問
出力が最も短くなるエンコード方式はどれですか?
このページのエンコード方式の中では、Base91 が 1 バイトあたり約 1.23 文字で最もコンパクトで、次いで Ascii85、Z85、Base85 が 1.25 文字です。Base64 は約 1.33 文字が必要ですが、対応している環境がはるかに多いため、一般的に標準として使われています。
同じサイズの入力でも、Base58 や Base62 の結果の長さが異なるのはなぜですか?
入力全体を 1 つの大きな数として変換するため、長さはサイズだけでなく値によっても変わります。また、先頭のゼロバイト 1 つごとに先頭の文字が 1 つ増えます。16進数、Base32、Base64 では、同じバイト数なら常に同じ長さになります。
このページで文字列をデコードできますか?
2進数の出力が長いのはなぜですか?
2進数では 1 バイトごとに 8 桁と区切り文字を書くため、16進数の 4 倍以上の長さになります。個々のビットを確認するための形式で、データの保存や送信には向いていません。
入力したテキストはサーバーに送信されますか?
いいえ。すべてのエンコードはブラウザ上の JavaScript で計算され、テキストがお使いのデバイスの外に出ることはありません。