~/tools / base64
Base64 エンコード・デコード
テキスト⇔Base64の双方向変換とファイル⇔Base64(data URI)の相互変換。日本語(UTF-8)も文字化けせず、Base64URLや改行入り(MIME)のデータも扱えます。処理はすべてブラウザ内で完結し、入力もファイルも送信しません。
ここにファイルをドラッグ&ドロップ、またはクリックして選択
上限 2MB — Base64化するとサイズは約1.33倍になります(大きいファイルの埋め込みには不向き)
※ テキストもファイルも外部送信なし。localStorageへの保存はテキストタブで「端末内に自動保存」をオンにした場合のみ行います(ファイルは保存しません)。
使い方
- テキストタブ: 左にテキストを入れて「エンコード ▸」、右にBase64を入れて「◂ デコード」。デコードは改行・空白入り(MIMEの76文字折返し)や
data:...;base64,付きの文字列、パディング=の欠けたものも受け付けます。 - Base64URL: JWTのヘッダー・ペイロードなど
-_を使う形式は「Base64URL」を選択(デコードはどちらの文字でも自動で通ります)。JWTを丸ごと調べるなら JWTデコード・検証ツール のほうが便利です。 - ファイルタブ: ファイルをドロップするとBase64文字列とdata URI(MIMEタイプ付き)を生成します。画像はプレビュー表示。逆にBase64やdata URIを貼り付ければ、元のファイルとしてダウンロードできます。
- デコード結果がテキスト(UTF-8)でない場合は、文字化けした文字列を出す代わりにhexダンプ(先頭256バイト)で中身を表示します。不正な文字が混ざっている場合は「何文字目のどの文字か」をエラーに出します。
デコードしたJSONを整形したいときは JSON整形・検証ツール、画像を埋め込む前に軽くしたいときは 画像圧縮ツール を。その他のツールは ツール一覧 にあります。
なぜ日本語のBase64は文字化けするのか(btoa/atobの罠)
JavaScriptの btoa() / atob() はLatin-1(1バイト文字)専用で、日本語をそのまま渡すと InvalidCharacterError で落ちます。無理に通す実装や、UTF-8とShift_JISの解釈違いがあると「縺薙s縺ォ縺。縺ッ」のような文字化けになります。正解は一度UTF-8のバイト列に変換してからBase64化することです。
btoa('こんにちは'); // ✕ InvalidCharacterError(Latin-1範囲外)
// ○ TextEncoder でUTF-8バイト列にしてからBase64化する
const bytes = new TextEncoder().encode('こんにちは');
const b64 = btoa(String.fromCharCode(...bytes)); // "44GT44KT44Gr44Gh44Gv"
// ○ 戻すときも TextDecoder を通す
const text = new TextDecoder().decode(
Uint8Array.from(atob(b64), c => c.charCodeAt(0))
); // "こんにちは" このツールも同じ方式(TextEncoder / TextDecoder + Base64)で実装しているため、日本語・絵文字を含む任意のUTF-8テキストを正しく往復できます。他システムとやり取りする場合は「Base64の中身がUTF-8であること」を双方で揃えるのがポイントです。
よくある質問
Base64は暗号化ですか?パスワードを入れても安全ですか?
いいえ、Base64は暗号化ではなく「バイナリデータをテキストで表現するためのエンコード(符号化)」です。鍵がなくても誰でも一瞬で元に戻せるので、パスワードや秘密情報の保護には一切なりません。「Base64にしたから読めない」は通用しない、と覚えておいてください。秘匿が必要なら暗号化(AES等)やハッシュ化を使います。
日本語をBase64にすると文字化けする(またはエラーになる)のはなぜですか?
JavaScriptの btoa() / atob() がLatin-1(1バイト文字)しか扱えないためです。日本語などのマルチバイト文字をそのまま btoa() に渡すと InvalidCharacterError になり、他言語のライブラリと組み合わせるとUTF-8とShift_JISなど文字コードの解釈違いで文字化けします。正しくは TextEncoder で一度UTF-8のバイト列に変換してからBase64化し、戻すときも TextDecoder を通します。このツールはその方式で実装しているので日本語も化けません。
Base64とBase64URLの違いは何ですか?
Base64URLは、URLやファイル名で問題になる「+」を「-」に、「/」を「_」に置き換え、末尾のパディング「=」を省略した変種です。JWT(JSONウェブトークン)のヘッダー・ペイロードや、URLのクエリパラメータに埋め込む値はBase64URLが使われます。JWTを普通のBase64デコーダに貼って失敗するのは大抵この差が原因です。このツールは切替スイッチで両方に対応し、デコード時はどちらの文字が来ても受け付けます。
data URIはどんなときに使いますか?
小さい画像やフォントをHTML/CSSに直接埋め込んで、HTTPリクエストを減らしたいときに使います(例: <img src="data:image/png;base64,...">)。ただしBase64化でデータは約1.33倍に膨らみ、ブラウザキャッシュも効きにくくなるため、数KB程度の小さなアイコンやOGP生成・メール埋め込みなどの用途に向きます。大きい画像は普通にファイルとして配信するほうが速いです。
入力したテキストやファイルは送信されますか?
いいえ。エンコード・デコード・ファイルの読み込みはすべてブラウザ内のJavaScriptで実行され、外部への送信は一切ありません。テキストタブの内容は「端末内に自動保存」をオンにした場合のみ、お使いの端末のlocalStorageに保存されます(ファイルは保存しません)。