← ガイド記事一覧へ戻る

Base64エンコードとURLエンコードの違い

Base64エンコードとURLエンコード(パーセントエンコーディング)の仕組みの違いと、それぞれどんな場面で使うべきかを解説します。

Base64エンコードとは

バイナリデータのアイコンが文字列のブロック列に変換されるイメージ図

Base64エンコードは、任意のバイナリデータ(画像・音声・任意のバイト列など)を、A-Z・a-z・0-9・+・/の64種類の印字可能なASCII文字だけで表現し直す変換方式です。メールの添付ファイルや、HTMLの中に画像データを直接埋め込むData URLなど、バイナリデータをそのまま扱えないテキストベースの仕組みの中で利用されます。

URLエンコード(パーセントエンコーディング)とは

ブラウザのアドレスバーと%記号が特殊文字を安全な形式に変換するイメージ図

URLエンコードは、URLの中で特別な意味を持つ記号(?、&、スペースなど)や、日本語のようなASCII範囲外の文字を、URLとして安全に送信できる形式に変換する方式です。変換対象のバイト列を「%」に続けて16進数2桁で表記します(例: スペースは%20)。URLのクエリパラメータやパス部分に日本語・記号を含める際に必要になります。

2つの使い分け

  • バイナリデータ(画像・ファイル)をテキストとして扱いたい → Base64エンコード
  • URLの中に安全に埋め込みたい文字列(日本語・記号を含むパラメータ等)→ URLエンコード
  • Basic認証のヘッダーやJWTのペイロード部分 → Base64エンコード(JWTはURLセーフなBase64の亜種を使用)
  • フォーム送信・リンクのクエリパラメータ → URLエンコード

よくある間違い

Base64エンコードされた文字列には+や/といった記号が含まれることがあり、これをそのままURLのパラメータに使うと、URLエンコードされていないためリンクが正しく機能しないことがあります。Base64の文字列をURLに含めたい場合は、+や/を-や_に置き換える「URLセーフなBase64」を使うか、改めてURLエンコードをかける必要があります。

まとめ

Base64エンコードは「バイナリデータを文字列として扱う」ための変換、URLエンコードは「URLの中で安全に使える形式にする」ための変換で、目的が異なります。混同しやすいので、何のためにエンコードするのかを意識して使い分けましょう。