Base64 と URL エンコーディングの違い
Base64 と URL エンコーディング (percent encoding) はどちらもバイト列をテキストに変換しますが、目的と文字集合が違います。使い分けの基準を実例付きで解説します。
公開 · 更新 · yuzlrin
それぞれの使い所
Base64 は「バイナリを文字列にしたい」時に使います。代表例は画像を data URI (data:image/png;base64,...) に埋め込む、メールに添付する (MIME)、JWT のヘッダーやペイロード部分を運ぶ、など。元のバイト列が 3 バイトずつ 4 文字の ASCII に変換されるので、サイズは 約 1.33 倍になります。
URL エンコーディングは「URL 上で安全に通したい」時に使います。?q=こんにちは のような日本語クエリを ?q=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF に変換するのがこれです。変換対象は RFC 3986 で定義された予約文字・非 ASCII 文字だけで、ASCII の英数字はそのまま残ります。
混同しやすいポイント
Base64 の出力には + / = といった記号が含まれるため、そのまま URL のクエリ文字列に貼ると「+」が空白 "%20" に誤読される問題があります。URL で Base64 を運ぶ時は Base64 URL-safe 変種(+ → -、/ → _)を使うか、Base64 の上にさらに URL エンコーディングをかけるのが定石です。
逆に、URL エンコード済みの文字列を Base64 デコードしても意味ある結果にはなりません。まず URL デコード → その後 Base64 デコード、の順で処理する必要があります。
実務で迷った時の判断基準
・バイナリを JSON や HTML に埋め込みたい → Base64
・クエリ文字列やパスに非 ASCII や記号を入れたい → URL エンコーディング
・両方必要(API 経由でバイナリを送る等) → Base64 してさらに URL エンコード、または Base64 URL-safe を採用
どちらを使うかは「転送先がどの文字集合を受け付けるか」で決めると間違いにくいです。
関連ツール
よくある質問
Base64 と Base64url の違いは?
Base64url は RFC 4648 §5 で定義されている URL-safe な variant。'+' を '-' に、'/' を '_' に置換します。また末尾パディング '=' を省略するのが一般的で、URL やファイル名で安全に使えます。
Base64 で画像を埋め込むと遅くなる?
画像 1 枚程度なら HTTP リクエスト削減で体感は速くなります。ただし合計 30 KB を超えるとキャッシュが効かない不利が大きく、外部ファイル参照 + キャッシュの方が有利になります。
URL エンコーディングは日本語何バイト?
UTF-8 で符号化後に % エスケープするため、ひらがな 1 文字で「%E3%81%XX」= 9 文字。絵文字は「%F0%9F%XX%XX」= 12 文字になります。