仕様と根拠
何をしているか
WHATWG のアドレス仕様(1.3)では、percent-decode は「%」の後に 16 進 2 桁が続く部分をそのバイトに戻す処理、UTF-8 percent-encode は文字を UTF-8 に符号化してから各バイトを「%」+大文字の 16 進 2 桁にする処理と定められています。パスやクエリの percent-encode set は U+007E より大きい文字を含むため、日本語は %XX の列になります。
UTF-8 としての復号
続く %XX を 1 まとまりのバイト列として読み、WHATWG の Encoding Standard が定める utf-8 decoder と同じ範囲(先頭バイト C2〜F4、継続バイト 80〜BF。E0・ED・F0・F4 は第 2 バイトの範囲に例外)で文字に直します。無効なバイトはそのまま %XX で残し、エラーとして位置を示します。
ASCII の扱い
%20(空白)や %2F(スラッシュ)などの ASCII は、アドレスの区切りとして意味を持つため、既定では戻しません。戻す設定にしたときも、/ ? # & = + % のような区切りを戻した場合は、意味が変わる旨を警告します。
根拠にした仕様・資料
| 仕様・資料 | 確認日 | 使った箇所 |
|---|---|---|
| WHATWG URL Standard(Living Standard・2026-10-19) | 2026年10月29日 | 1.3 percent-decode・UTF-8 percent-encode・path/query percent-encode set。「%」の後が 16 進 2 桁でない場合、percent-decode は「%」をそのまま残す(URL パーサーでは検証エラー invalid-URL-unit) |
| WHATWG Encoding Standard(2026-10-19) | 2026年10月29日 | 8.1.1 utf-8 decoder(先頭バイト・継続バイトの有効範囲) |
指摘の段階
- エラー: 仕様に反していて、正しく読めない・処理できない入力です。
- 警告: 読めるものの、仕様の推奨に反する・矛盾する・意図と違う結果になりやすい入力です。
- 情報: 誤りではありませんが、知っておくとよい扱い(読み飛ばした部分や解釈)です。
入力の扱い(送信しない仕組み)
処理はすべてお使いのブラウザの中で行います。処理の本体はこのサイトから配信する小さなスクリプト(/app.js)で、外部のサービスやライブラリを読み込みません。ページはブラウザに通信を禁止させる設定(Content-Security-Policy の connect-src)つきで配信しており、入力した内容がサーバーや第三者へ送られることはありません。ファイルを選んだ場合も、端末の中で読み込むだけです。
このツールでできないこと(制約)
- UTF-8 以外の percent-encoding(Shift_JIS・EUC-JP など)は判定できません。UTF-8 として読めない部分はエラーとして残します。
- ホスト名の日本語は、%XX ではなく別の方式で符号化されるため、符号化の変換では変えません。
- 「+」を空白と読むフォーム形式のクエリの規則は扱いません。「+」はそのまま残します。
- アドレスの正しさ(ページが存在するか、書式として適切か)は確認しません。
ご利用にあたって
- 入力した文章はブラウザの中だけで処理し、サーバーへは送信しません。ただし、コピーやダウンロードした結果の扱いにはご注意ください。
- 復号した結果をそのままアドレスとして使うと、空白や区切り記号の扱いが変わることがあります。用途に合わせて確認してください。