Base64 を ASCII にデコードする方法
- 入力 · Base64 に Base64 を貼り付けます。文字コード はあらかじめ ASCII に設定されています。
- 出力 · テキスト でテキストを読みます。127 を超えるバイトはすべて
�で表示されます。 �が表示されたら、内容は純粋な ASCII ではありません。文字コード を UTF-8 か Windows-1252 に切り替えて読んでください。- 出力をコピー するか、デコードしたバイト列を ダウンロード します。
逆にプレーンテキストをエンコードするには、ASCII を Base64 に変換 を使ってください。
厳密な ASCII デコード
多くのツールは 127 を超えるバイトを何らかの 8 ビット文字コードとして読むため、非 ASCII のバイトがもっともらしい文字に化けて、誰も気づきません。このページでは ASCII は 127 までで、128~255 のバイトはすべて置換文字で表示します。� の数がそのまま非 ASCII バイトの数です。
そのため、ASCII しか受け付けないシステムにデコードしたデータを渡す前の簡単なチェックに使えます。UTF-8 のアクセント付き文字は 2 バイトなので �� と表示され、カーリークォートは 3 バイトなので ��� になります。
例
| Base64 | バイト(16進数) | ASCII として |
|---|---|---|
QVNDSUk= | 41 53 43 49 49 | ASCII |
MjAwIE9L | 32 30 30 20 4F 4B | 200 OK |
YQli | 61 09 62 | a、タブ、b |
Y2Fmw6k= | 63 61 66 C3 A9 | caf��(UTF-8 の café) |
4oCcaGnigJ0= | E2 80 9C 68 69 E2 80 9D | ���hi���(UTF-8 の “hi”) |
最後の 2 行は、文字コード を UTF-8 にすると正しくデコードされます。ステータス行の 推定形式 は ASCII モードでも形式を表示するので、PNG や PDF も判別されます。UTF-8 に戻すと、対応するファイル用デコーダーへのリンクが表示されます。
Base64 にした ASCII の見分け方
ASCII テキストの Base64 には見分けやすい形があります。どのバイトも 80 未満なので、4 文字グループの先頭の文字は必ず A~f の範囲に入り、g~z、数字、+、/ にはなりません。ただし文字の位置は 1 対 1 には対応しません。ASCII の 3 文字は必ず Base64 の 4 文字になり、4 文字の境界から始まらない部分文字列はデコードできません。
各文字のコードが知りたい場合も、バイト値はすぐに得られます。QVNDSUk= は 10進数で 65 83 67 73 73 です。Base64 を 10進数に変換 と Base64 を Hex に変換 でバイト値を一覧でき、Base64 を 2進数に変換 ではビットを表示できます。
コードで Base64 を ASCII に変換する
import base64
base64.b64decode("QVNDSUk=").decode("ascii") # 'ASCII'
base64.b64decode("Y2Fmw6k=").decode("ascii")
# UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 3
list(base64.b64decode("QVNDSUk=")) # [65, 83, 67, 73, 73]
JavaScript には落とし穴があります。WHATWG Encoding Standard では new TextDecoder("ascii") は Windows-1252 の別名なので、Y2Fm6Q== を café とデコードし、非 ASCII のバイトを報告することはありません。代わりに bytes.every(b => b < 128) などで自分でバイト列を確認してください。詳しくは JavaScript での Base64 と Python での Base64 を参照してください。
よくある質問
Base64 を ASCII テキストに変換するには?
上に Base64 を貼り付けてください。デコードした 0~127 のバイトが、それぞれ ASCII 文字として表示されます。Python では base64.b64decode(s).decode("ascii") で同じことができ、127 を超えるバイトがあるとエラーになります。
出力に � が表示されるのはなぜですか?
そのバイトが ASCII ではないからです。たいていはアクセント付きの文字、カーリークォート、絵文字を含む UTF-8 のテキストなので、文字コードを UTF-8 に切り替えると読めます。出力のほとんどが � なら、データはおそらくファイルです。
ASCII コードを数値で見るには?
65 83 67 73 73 のようなバイト値なら Base64 を 10進数に変換、41 53 43 49 49 の形なら Base64 を Hex に変換 を使ってください。
ASCII テキストに見えない文字が含まれることはありますか?
あります。タブ、キャリッジリターン、ラインフィードなど、0~31 の制御コードも ASCII です。これらは通常どおりデコードされるので、単語の間のタブはタブのまま残ります。