URL エンコード / デコード

URLコンポーネントとクエリ文字列を即座にエンコード・デコード。無料、ブラウザ内で処理。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
エンコードは encodeURIComponent で URL の一部分を処理し、: / ? & = # などの区切り文字も変換します。デコードは UTF-8 のパーセントエンコードを読みます。方向を変えると現在の入力をすぐに変換します。
「スペースを + に」を有効にすると URLSearchParams のフォーム形式を使います。a b+c は a+b%2Bc になり、! アポストロフィ ( ) ~ も変換します。デコードでは + を空白として読みます。無効時は空白を %20 にし、デコードした + はそのままです。
「入れ替え」は両欄の内容と変換方向を入れ替えます。待機中の変換を中止し、入れ替えた値を保ちます。入力を編集するか設定を変えると再変換します。
「クリア」は両欄とステータスを消し、待機中の変換と保存を中止し、保存済みの入力を削除します。ツール内にフォーカスがあれば Ctrl/⌘+L でも同じ操作ができます。変換方向とフォーム形式の設定は保ちます。
入力が止まってから300ミリ秒後に結果を更新します。単独の UTF-16 サロゲートはエンコードできません。デコードでは不正な % エスケープや UTF-8 バイトの位置を示します。GBK、Shift_JIS、EUC-KR には対応しません。最後の入力は500ミリ秒後にこのブラウザーへ保存します。
「コピー」は現在の出力をすべてコピーします。失敗した場合は出力を選択して手動でコピーしてください。
詳しいガイドを読む URLエンコード・デコード完全ガイド:パーセントエンコーディングの仕組み
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

例:検索キーワードをクエリに入れる

?q= の後ろに検索語をつなぐ前に、検索語を「値」としてエンコードします。そのままだと空白や &、= が URL の区切りとして読まれてしまいます。

半角スペースを入れた 渋谷 ラーメン を「スペースを + に(フォームデータ)」でエンコードすると %E6%B8%8B%E8%B0%B7+%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3 になります。漢字もカタカナも長音記号も、1文字が3組の %XX です。

全角スペースは %E3%80%80 になる

日本語入力をオンにしたままスペースキーを押すと、設定によっては全角スペースが入ります。見た目は似ていても別の文字なので、URL では違うバイト列になります。

全角スペースの 渋谷 ラーメン は、同じ設定でも %E6%B8%8B%E8%B0%B7%E3%80%80%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3 になり、+ は現れません。サーバー側がデコード後の半角スペースで単語を分けている場合、全角スペースでは分割されません。半角に揃えてから送るか、サーバー側で U+3000 も空白として扱う必要があります。

Shift_JIS の古いリンク

HTML のフォームは、ページ自体の文字コードでクエリをエンコードします(HTML Living Standard 4.10.22.5:まず文書の文字エンコーディングを使う)。そのため Shift_JIS で作られたページから送られた「渋谷」は、UTF-8 とはまったく違う %8Fa%92J になります。a と J は Shift_JIS の2バイト目がたまたま ASCII の英字にあたる部分で、エンコードされずに残っています。

これをデコードすると、文字化けした文字は出さずに 1 文字目から:%8F は有効な UTF-8 ではありません。Shift_JIS などほかの文字コードのテキストはここではデコードできません。 と止まります。このツールは UTF-8 だけを扱います。Shift_JIS や EUC-JP は WHATWG の Encoding Standard で「レガシー」とされている文字コードで、読むには文字コードを指定できる処理が必要です。たとえば Python なら urllib.parse.unquote('%8Fa%92J', encoding='shift_jis') で 渋谷 に戻ります。

+ と %20 の読み方

デコードの初期設定では %XX だけを元に戻します。

最初の例の出力 %E6%B8%8B%E8%B0%B7+%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3 をそのままデコードすると 渋谷+ラーメン となり、+ が残ります。フォームから送られた値だとわかっているときは「スペースを + に」を有効にして読み直してください。逆に、値の中の本物の + は、フォーム形式では %2B と書かれます。

このツールが向いている場面

  • クエリの値に空白、&、=、#、日本語が入るとき。
  • URL をまるごと別の URL のパラメーターにするとき(ログイン後の戻り先など)。: や / もエンコードされるので、そのまま値として渡せます。
  • 開くための完全な URL を整えたいときには向きません。区切り文字までエンコードされ、リンクとして使えなくなります。その場合は URL パーサーでパラメーターを1つずつ直してください。

制限

  • 対応する文字コードは UTF-8 だけで、文字コードの推測もしません。Shift_JIS や EUC-JP のパーセントエンコードはほとんどの場合エラーになりますが、バイト列がたまたま UTF-8 としても正しいときは別の文字に化けて表示され、注意も出ません。
  • ISO-2022-JP はすべて7ビットのバイトなので、エラーにならずに記号の列としてデコードされます。ISO-2022-JP の「渋谷」%1B%24B%3DBC%2B%1B%28B は ␛$B=BC+␛(B になります(␛ は見えない制御文字 ESC をここで置き換えたものです)。
  • デコードは最初の問題で止まり、その位置を示します。末尾の 100% のように単独の % もエラーです。
  • 初期設定のエンコードでは ! ' ( ) * をそのまま残します(encodeURIComponent の仕様)。署名の計算などで %21 %27 %28 %29 %2A が必要なときは手で置き換えてください。
  • encodeURI のモードはありません。
  • 絵文字の途中で切れた文字列(単独のサロゲート)はエンコードできず、位置を表示します。

FAQ

URLエンコードとは何ですか?

URLエンコード(パーセントエンコーディング、RFC 3986 第2.1節)は、文字の UTF-8 のバイトを1バイトずつ「%」と16進数2桁で書く方法です。スペースは %20、& は %26 になり、日本語の文字は多くが3バイトなので「東」は %E6%9D%B1 になります。

encodeURIとencodeURIComponentの違いは何ですか?

encodeURI は URL 全体を対象にし、; , / ? : @ & = + $ # の区切り文字をそのまま残します。encodeURIComponent はクエリの値など URL の一部分を対象にし、これらの区切り文字もエンコードします。英数字と - _ . ! ~ * ' ( ) はどちらもエンコードしません。[ と ] は encodeURI でも %5B、%5D になります。このツールは encodeURIComponent を使います。

デコードしても + が残るのはなぜですか?

decodeURIComponent が元に戻すのは %XX だけです。空白を + で表すのは HTML フォームの形式(application/x-www-form-urlencoded)で、パーセントエンコーディングの規則ではありません。そのため初期設定では a+b は a+b のままです。「スペースを + に(フォームデータ)」を有効にすると、URLSearchParams と同じく + を空白として読みます。

デコードに失敗するのはなぜですか?

「%」の後に16進数2桁がない(100%、%zz など)か、バイト列が UTF-8 として正しくないかのどちらかです。途中で切れた %E4%B8 や、Shift_JIS で作られた %8F などが後者にあたります。ステータス行に位置と問題の部分が表示されます。

日本語や全角スペースもエンコードできますか?

はい。日本語は UTF-8 のバイト列にしてからエンコードします。全角スペース(U+3000)は半角スペースとは別の文字なので %E3%80%80 になり、「スペースを + に」を有効にしても + にはなりません。

データはサーバーに送信されますか?

いいえ。変換はブラウザ内で行い、結果は JavaScript 組み込みの encodeURIComponent / decodeURIComponent と同じです。最後の入力は次に開いたときのためにこのブラウザーのローカルストレージに保存され、「クリア」で削除できます。