Base64 エンコード / デコード
テキストやファイルをBase64にエンコード、Base64をテキストにデコード。日本語(UTF-8)も文字化けしない。URL-safe・Data URI対応。ブラウザ内で処理、アップロード不要。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
日本語をエンコードした結果
このツールはテキストをまず UTF-8 のバイト列にしてから Base64 に変換します。ひらがな・カタカナとよく使う漢字は UTF-8 で1文字3バイトなので、日本語だけの文字列ならほとんどの場合「文字数 × 4」文字の Base64 になります(𠮷 のような拡張漢字は4バイトです)。
日本語テキスト(7文字、21バイト)を Standard でエンコードすると 5pel5pys6Kqe44OG44Kt44K544OI になります。28文字で、末尾に = は付きません。
半角カナも UTF-8 では1文字3バイトです。Shift_JIS では1バイトだったので、古いシステムから移したデータでは長さの見積もりが変わります。
アイウ は 772x772y772z になり、全角の アイウ(44Ki44Kk44Km)と同じ12文字です。
メールの件名に出てくる =?UTF-8?B?…?=
日本語の件名は、メールのヘッダーでは =?文字コード?B?エンコード済みテキスト?= という形の encoded-word で書かれます。B は Base64 を使うという意味です(RFC 2047 の第2節と第4.1節)。メールの「ソースを表示」で次のような行を見つけたら、?B? と ?= の間だけを貼り付けてデコードします。
Subject: =?UTF-8?B?5Lya6K2w44Gu6K2w5LqL6Yyy?=
5Lya6K2w44Gu6K2w5LqL6Yyy をデコードすると 会議の議事録 が表示されます。RFC 2047 では1つの encoded-word は75文字までなので、長い件名は複数に分かれます。それぞれが完結した Base64 なので、1つずつデコードしてつなげてください。途中に = を含むまま連結するとエラーになります。
たとえば 第1回 と 会議 が別々の encoded-word(56ysMeWbng== と 5Lya6K2w)になっていたとき、中身をそのままつないだ 56ysMeWbng==5Lya6K2w を貼ると 11 文字目:「=」はパディングなので末尾にしか置けません。 と表示されます。== までを1つ目としてデコードし、残りを別にデコードしてください。
ISO-2022-JP の件名は記号の列になる
日本のメールでは文字コードに ISO-2022-JP(RFC 1468)がよく使われてきました。ISO-2022-JP は ESC $ B で漢字モードに切り替え、ESC ( B で ASCII に戻る7ビットの符号化です。同じ件名を ISO-2022-JP で書くと =?ISO-2022-JP?B?GyRCMnE1RCRONUQ7dk8/GyhC?= になります。
中身をこのツールでデコードすると、エラーにはならず ␛$B2q5D$N5D;vO?␛(B のような記号の列が表示されます(␛ は制御文字 ESC の位置を示すためにここで置き換えたもので、実際の出力では見えません)。バイト列がすべて ASCII の範囲なので UTF-8 としては正しく、文字化けしたように見えるだけです。encoded-word の先頭が =?ISO-2022-JP? のときは、メールソフトか、文字コードを指定できるプログラムで読んでください。
デコードで受け付ける入力
- 末尾の
=は省略できます。ブラウザーのatob()は WHATWG の forgiving-base64 decode に従い、パディングを必須にしません。 - 改行、タブ、スペースは Standard と URL-safe のどちらのモードでも無視されます。メール本文の Base64 は76文字ごとに折り返されますが(RFC 2045 第6.8節)、そのまま貼り付けて構いません。URL-safe で
5pel5pysの後に改行を入れて6Kqeを続けても、日本語とデコードされます。 - URL-safe モードでも Standard の文字列を読めます。逆に、
-や_を含む文字列を Standard でデコードするとエラーになり、ステータス行が URL-safe への切り替えを案内します。
Shift_JIS で保存した アイウ の Base64 は sbKz です。これをデコードすると、文字化けした文字ではなく デコードしたデータの 1 バイト目(B1)は有効な UTF-8 ではありません。デコード結果は UTF-8 テキストのみ表示できるため、バイナリデータや Shift_JIS などのテキストは表示できません。 と表示されます。Base64 としては正しくても、出てきた3バイト(B1 B2 B3)が UTF-8 ではないためです。B1 は UTF-8 では文字の先頭に来られないバイトです。
制限事項
- デコード結果は UTF-8 テキストとしてのみ表示します。Shift_JIS や EUC-JP の文字列、画像などのファイルには戻せません。
- 文字列の途中に
=がある場合や、4文字ずつ区切って1文字余る場合はエラーになり、ステータス行に=の位置か文字数が表示されます。 - ファイルのエンコードに上限はありませんが、5 MiB(5,242,880 バイト)を超えると
ファイルが大きいため、エンコードに数秒かかることがあります。と表示します。ファイル全体と結果をメモリーに置くため、大きなファイルではページが重くなります。 - Base64 は暗号化ではなく、誰でも元に戻せます。秘密の情報には AES 暗号化ツールを使ってください。
主な使用例
- API認証: HTTP の Basic 認証は
ユーザー名:パスワードを Base64 にしてヘッダーに入れます(RFC 7617)。 - Data URI: CSS や HTML に埋め込む画像やフォントは Base64 です。画像は画像 Base64 変換ツールを使うと、ファイルの中身から種類を判定します。
- JWT: ヘッダーとペイロードはパディングなしの URL-safe Base64 なので、URL-safe を選んでデコードします。
- メール: 添付ファイルは Base64 で送られ、日本語の件名も Base64(RFC 2047 の B エンコーディング)で書けます。
FAQ
Base64とは何ですか?
Base64はバイナリデータをASCIIテキストに変換するエンコード方式で、64種類の印刷可能文字を使用します。Data URI、メール添付ファイル、APIトークンなどでよく使われます。
データはサーバーに送信されますか?
いいえ。変換はブラウザ内で JavaScript 組み込みの btoa / atob を使って行い、入力したテキストも選んだファイルも外部に送信しません。最後に入力したテキストは次に開いたときのためにこのブラウザーのローカルストレージに保存されます。ファイルは保存せず、「クリア」で保存済みのテキストも削除します。
バイナリファイルもエンコードできますか?
はい。エンコードモードで、ファイルを枠にドロップするか、枠をクリックして選びます。種類を問わずファイルのバイト列をそのまま Base64 にし、data:<MIMEタイプ>;base64, の接頭辞も付けられます。デコード結果は UTF-8 テキストとしてだけ表示するため、画像などバイナリデータの Base64 はエラーになり、ファイルとして保存できません。画像を Data URI にするときは画像 Base64 変換ツールを使ってください。
デコードに失敗するのはなぜですか?
原因は3つです。Base64 にない文字が含まれている(Standard を選んだまま URL-safe の - や _ を入れた場合など)、文字列が途中で切れて4文字単位で1文字余っている、デコードしたバイト列が UTF-8 として読めない(バイナリデータや Shift_JIS のテキスト)。末尾の = が欠けていてもデコードできます。ステータス行には原因と位置(入力の何文字目か、デコード結果の何バイト目か)が表示されます。