メインコンテンツへスキップ

~/tools / base64

Base64 エンコード・デコード

テキスト⇔Base64の双方向変換とファイル⇔Base64(data URI)の相互変換。日本語(UTF-8)も文字化けせず、Base64URLや改行入り(MIME)のデータも扱えます。処理はすべてブラウザ内で完結し、入力もファイルも送信しません

形式
テキスト
Base64

※ テキストもファイルも外部送信なし。localStorageへの保存はテキストタブで「端末内に自動保存」をオンにした場合のみ行います(ファイルは保存しません)。

使い方

  1. テキストタブ: 左にテキストを入れて「エンコード ▸」、右にBase64を入れて「◂ デコード」。デコードは改行・空白入り(MIMEの76文字折返し)や data:...;base64, 付きの文字列、パディング = の欠けたものも受け付けます。
  2. Base64URL: JWTのヘッダー・ペイロードなど - _ を使う形式は「Base64URL」を選択(デコードはどちらの文字でも自動で通ります)。JWTを丸ごと調べるなら JWTデコード・検証ツール のほうが便利です。
  3. ファイルタブ: ファイルをドロップするとBase64文字列とdata URI(MIMEタイプ付き)を生成します。画像はプレビュー表示。逆にBase64やdata URIを貼り付ければ、元のファイルとしてダウンロードできます。
  4. デコード結果がテキスト(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に保存されます(ファイルは保存しません)。