URLエンコード・デコードツール【無料・登録不要】日本語URLの変換・クエリ分解に対応
日本語や記号を URL で使える形(%E6%97%A5 のような「%XX」の形)に変換したり、元の文字に戻したりできる無料ツールです。JavaScript の encodeURIComponent 形式と encodeURI 形式を切り替えられるほか、フォームの送信で使われる「空白を + にする」形式にも対応しています。
URL を貼り付けると、クエリ文字列(? より後ろの部分)をキーと値の表に分解して表示します。デコードできない文字列は、何文字目のどこが間違っているのかを日本語で表示します。入力した文字はお使いのブラウザの中だけで処理され、サーバーには一切送信されません。
クエリ文字列の分解
入力欄に「?」付きの URL や「a=1&b=2」の形の文字列を入れると、キーと値の表を表示します(+ は空白として読みます)。
| # | キー | 値(デコード後) |
|---|
入力した文字はお使いのブラウザ内だけで処理されます。サーバーへの送信や保存は一切行いません。
使い方
文字を URL エンコードする
- 「変換」で「エンコード(文字 → %XX)」を選びます。
- 「形式」を選びます。クエリの値など URL の一部に入れる文字なら「encodeURIComponent」、日本語を含む URL 全体なら「encodeURI」を選びます。
- 入力欄に文字を入力します。入力と同時に、出力欄に結果が表示されます。
- 「出力をコピー」を押すと、結果をクリップボードにコピーできます。
たとえば「日本」は「%E6%97%A5%E6%9C%AC」に変換されます。文字は UTF-8 のバイト列として変換されるので、日本語 1 文字はふつう「%XX」3 つ分になります。
URL デコードして元の文字に戻す
- 「変換」で「デコード(%XX → 文字)」を選びます。
- 入力欄に、%XX を含む文字列や URL を貼り付けます。
- 出力欄に、元の文字に戻した結果が表示されます。
「出力を入力に移して逆変換」を押すと、出力をそのまま入力欄に移し、エンコードとデコードを切り替えます。正しく元に戻るかを確かめたいときに便利です。
フォーム形式(空白を + にする)で変換する
HTML のフォームから送信されたデータや、検索サイトの URL などでは、空白が「%20」ではなく「+」になっていることがあります。この形式(application/x-www-form-urlencoded)を扱うときは、「形式」を encodeURIComponent にしたうえで、「フォーム形式」にチェックを入れます。
- エンコード:空白を「+」にし、英数字と
* - . _以外をすべて %XX にします。JavaScript の URLSearchParams と同じ結果になります。 - デコード:「+」を空白に置き換えてから、%XX を元の文字に戻します。文字の「+」そのものは「%2B」と書かれています。
クエリ文字列を表に分解する
入力欄に「?」を含む URL や、「a=1&b=2」の形の文字列を入れると、ツールの下の「クエリ文字列の分解」に、キーと値の表が表示されます。値はデコードした形で表示し、元の文字列と違う場合は、その下に元の文字列も小さく表示します。
分解のルールは、ブラウザの URLSearchParams と同じです。「#」より後ろ(ページ内の位置を表す部分)は対象外で、「+」は空白として読みます。同じキーが何回も出てくる場合は、出てきた順にすべて表示します。
デコードできないときは
「%」の後ろが 16 進数 2 桁になっていない、UTF-8 の文字が途中で切れている、といった文字列はデコードできません。その場合は、エラーの行と文字の位置、原因が表示されます。「入力欄のエラーの場所を選択」を押すと、入力欄の該当箇所が選択されます。
古い Web サイトなどでは、日本語を Shift_JIS でエンコードしていることがあります。UTF-8 として読めず、Shift_JIS としてなら読める場合は、参考として Shift_JIS で読んだ結果も表示します。
複数の行をまとめて変換する
「1 行ずつ変換する」にチェックを入れると、行ごとに別々に変換し、改行はそのまま残します。チェックを入れない場合は、改行も「%0A」に変換します。
URLエンコードとは?
URL エンコード(パーセントエンコーディング)は、URL にそのまま書けない文字を「%」と 16 進数 2 桁の組み合わせで表す方法です。ルールは RFC 3986 という URL の仕様で決められています。
URL に書ける文字は、半角の英数字と一部の記号に限られています。また、「/」「?」「&」「=」「#」などの記号は、URL の区切りとして特別な意味を持っています。そのため、日本語や空白、区切りと同じ記号を値として URL に入れたいときは、文字を UTF-8 のバイト列にして、1 バイトずつ「%XX」の形に置き換えます。
| 元の文字 | UTF-8 のバイト列(16 進数) | URL エンコード後 |
|---|---|---|
| A | 41 | A(英数字はそのまま) |
| 空白 | 20 | %20(フォーム形式では +) |
| & | 26 | %26 |
| あ | E3 81 82 | %E3%81%82 |
| 日本 | E6 97 A5 E6 9C AC | %E6%97%A5%E6%9C%AC |
文字コードと UTF-8 のバイト数については、「UTF-8とは?仕組み・バイト数・BOMの有無をわかりやすく解説」で詳しく解説しています。
コマンドで URL エンコードする
Windows の PowerShell では、次のコマンドで encodeURIComponent と同じように変換できます。
[uri]::EscapeDataString("日本語 テスト")
実行すると「%E6%97%A5%E6%9C%AC%E8%AA%9E%20%E3%83%86%E3%82%B9%E3%83%88」と表示されます。元に戻すときは、[uri]::UnescapeDataString("...") を使います。
Python では、標準ライブラリの urllib.parse を使います。次のコマンドも、上と同じ結果になります。
py -c "from urllib.parse import quote; print(quote('日本語 テスト', safe=''))"
空白を「+」にするフォーム形式にしたいときは、quote の代わりに quote_plus を使います(結果は「%E6%97%A5%E6%9C%AC%E8%AA%9E+%E3%83%86%E3%82%B9%E3%83%88」)。なお、Python の quote は「~」を変換しないなど、記号の扱いが JavaScript と少し違います。
encodeURI と encodeURIComponent の違い
JavaScript には、URL エンコードをする関数が 2 つあります。違いは、URL の区切りに使う記号を変換するかどうかです。
| 元の文字 | encodeURI | encodeURIComponent | フォーム形式 |
|---|---|---|---|
| / | /(そのまま) | %2F | %2F |
| ? | ?(そのまま) | %3F | %3F |
| & | &(そのまま) | %26 | %26 |
| = | =(そのまま) | %3D | %3D |
| # | #(そのまま) | %23 | %23 |
| + | +(そのまま) | %2B | %2B |
| 空白 | %20 | %20 | + |
| ! ‘ ( ) ~ | そのまま | そのまま | %21 %27 %28 %29 %7E |
| % | %25 | %25 | %25 |
| あ | %E3%81%82 | %E3%81%82 | %E3%81%82 |
- encodeURI:URL 全体を渡して使います。「https://」や「/」「?」「&」などの区切りを残したまま、日本語や空白だけを変換します。
- encodeURIComponent:クエリの値やパスの一部など、URL の「部品」を渡して使います。区切りの記号も変換するので、値の中に「&」や「=」があっても URL が壊れません。
よくある間違いは、クエリの値に encodeURI を使ってしまうことです。たとえば検索語「A&B」を encodeURI で変換すると「A&B」のままなので、?q=A&B は「q が A、B という別のパラメーター」と読まれてしまいます。encodeURIComponent なら ?q=A%26B になり、正しく「q が A&B」と読まれます。
デコードでも同じ違いがあります。decodeURI は、%2F(/)や %26(&)のような区切りを表す %XX を元に戻さずに残します。すべて元に戻したいときは decodeURIComponent を使います。
よくある質問
%25 がたくさん出てきます。なぜですか?
すでにエンコードされた文字列を、もう一度エンコードした可能性があります(二重エンコード)。「%」は「%25」に変換されるため、「%E6」は「%25E6」になります。このツールでは、エンコードする文字列に %XX が含まれていると注意を表示します。元に戻したいときは、「変換」を「デコード」にしてください。
「+」が空白に戻りません
decodeURIComponent は「+」を空白として扱いません。フォームから送信された値など、空白が「+」になっている文字列をデコードするときは、「「+」を空白として扱う(フォーム形式)」にチェックを入れてください。
日本語のドメイン名も変換できますか?
このツールでは変換できません。日本語のドメイン名は、URL エンコードではなく Punycode(ピュニコード)という別の方法で「xn--」から始まる形に変換されます(例:「例.jp」は「xn--fsq.jp」)。encodeURI 形式で変換すると、ドメイン名の部分も %XX になってしまうので注意してください。
Shift_JIS で URL エンコードできますか?
エンコードは UTF-8 だけに対応しています。現在の Web では UTF-8 が標準です。デコードできないときに、Shift_JIS としてなら読める場合は、参考として読んだ結果を表示します。
入力したデータは保存されませんか?
保存されません。変換はすべてお使いのブラウザの中で行われ、サーバーへの送信も保存も行いません。ページを閉じると入力内容は消えます。ただし、URL にはパスワードやアクセス用のトークンが含まれていることがあります。どのツールを使う場合でも、そうした情報を含む URL の扱いには注意してください。
関連する記事・ツール
- UTF-8とは?仕組み・バイト数・BOMの有無をわかりやすく解説
- 文字コードとは?UTF-8・Shift_JIS・EUC-JPの違いと文字化けの原因・直し方
- JavaScriptとは?できること・歴史・Javaとの違いと、ブラウザで今すぐ試す方法
- Base64エンコード・デコードツール【無料・登録不要】日本語・ファイル対応
- HTML エスケープ・アンエスケープ
- JWT デコーダー