Base64 エンコード / デコード

テキストやファイルをBase64にエンコード、Base64をテキストにデコード。日本語(UTF-8)も文字化けしない。URL-safe・Data URI対応。ブラウザ内で処理、アップロード不要。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
テキストは UTF-8 で処理します。入力を止めて0.3秒後に変換し、「エンコード」「デコード」を切り替えると現在のテキストをすぐに変換します。デコードは UTF-8 テキストのみ表示します。単独のサロゲートは位置を示してエラーにします。
Standard は +、/ と末尾の = を使い、URL-safe は -、_ を使って末尾の = を除きます。切り替えると現在のテキストやファイルの結果を更新します。読み込み中のファイルには最新の選択を使います。
現在の入力と出力を入れ替えます。モードは変わりません。待機中のテキスト変換を取り消し、入れ替えた値をそのまま残します。
ファイルをここにドロップ、またはクリックして選択
「エンコード」で任意のファイルを選ぶかドロップすると、元のバイト列を変換します。5 MiB を超えると注意を表示し、処理を続けます。ファイル全体と Base64 の結果をメモリに保持します。
表示中の出力全体をコピーします。有効な Data URI の接頭辞も含みます。失敗した場合は出力を選択し、手動でコピーしてください。
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

日本語をエンコードした結果

このツールはテキストをまず 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 のテキスト)。末尾の = が欠けていてもデコードできます。ステータス行には原因と位置(入力の何文字目か、デコード結果の何バイト目か)が表示されます。