URLエンコード文字の完全一覧表(ASCII + Unicode)
URLエンコードされた文字の完全なリファレンス表。すべての印字可能なASCII文字(32〜126)、よく使われるUnicode文字、そしてRFC 3986で定義されたパーセントエンコード表現を網羅しています。
ASCII制御文字と特殊文字
ASCIIコードの0〜31および127番の文字は制御文字です。これらは印字できないため、URL内では常にパーセントエンコードしなければなりません。URLの文脈で最もよく遭遇する制御文字は、スペース(ASCII 32)、水平タブ(ASCII 9)、そして改行文字(ASCII 10および13)です。
RFC 3986によれば、非予約文字(unreserved character)でも、予約された目的で使われる予約文字(reserved character)でも、パーセントエンコードされた3文字(percent-encoded triplet)でもないオクテットは、すべてパーセントエンコードしなければなりません。実際には、これはURIコンポーネント内のほとんどの非英数字をエンコードすべきであることを意味します。
| 文字 | ASCIIコード | URLエンコード | 説明 |
|---|---|---|---|
| (tab) | 9 | %09 |
水平タブ |
| (LF) | 10 | %0A |
ラインフィード(改行) |
| (CR) | 13 | %0D |
キャリッジリターン(復帰) |
| (space) | 32 | %20 |
スペース |
印字可能なASCII文字
以下は、すべての印字可能なASCII文字(コード32〜126)とそのURLエンコード形式の完全なリファレンスです。RFC 3986で「非予約文字(unreserved)」とされている文字はエンコードを必要としません。予約文字は、その予約された目的以外で使う場合にエンコードしなければなりません。
| 文字 | ASCII | Hex | URLエンコード | 種別 |
|---|---|---|---|---|
| (space) | 32 | 20 | %20 |
特殊 |
| ! | 33 | 21 | %21 |
予約 |
| " | 34 | 22 | %22 |
危険 |
| # | 35 | 23 | %23 |
予約 |
| $ | 36 | 24 | %24 |
予約 |
| % | 37 | 25 | %25 |
特殊 |
| & | 38 | 26 | %26 |
予約 |
| ' | 39 | 27 | %27 |
予約 |
| ( | 40 | 28 | %28 |
予約 |
| ) | 41 | 29 | %29 |
予約 |
| * | 42 | 2A | %2A |
予約 |
| + | 43 | 2B | %2B |
予約 |
| , | 44 | 2C | %2C |
予約 |
| - | 45 | 2D | %2D |
非予約 |
| . | 46 | 2E | %2E |
非予約 |
| / | 47 | 2F | %2F |
予約 |
| 0-9 | 48-57 | 30-39 | 不要 | 非予約 |
| : | 58 | 3A | %3A |
予約 |
| ; | 59 | 3B | %3B |
予約 |
| < | 60 | 3C | %3C |
危険 |
| = | 61 | 3D | %3D |
予約 |
| > | 62 | 3E | %3E |
危険 |
| ? | 63 | 3F | %3F |
予約 |
| @ | 64 | 40 | %40 |
予約 |
| A-Z | 65-90 | 41-5A | 不要 | 非予約 |
| [ | 91 | 5B | %5B |
予約 |
| \ | 92 | 5C | %5C |
危険 |
| ] | 93 | 5D | %5D |
予約 |
| ^ | 94 | 5E | %5E |
危険 |
| _ | 95 | 5F | %5F |
非予約 |
| ` | 96 | 60 | %60 |
危険 |
| a-z | 97-122 | 61-7A | 不要 | 非予約 |
| { | 123 | 7B | %7B |
危険 |
| | | 124 | 7C | %7C |
危険 |
| } | 125 | 7D | %7D |
危険 |
| ~ | 126 | 7E | %7E |
非予約 |
よく使われるUnicodeのエンコード
Unicode文字は、まずUTF-8のバイト列にエンコードされ、その後各バイトが個別にパーセントエンコードされます。マルチバイト文字は複数のパーセントエンコード3文字を生成します。
| 文字 | 説明 | UTF-8バイト | URLエンコード |
|---|---|---|---|
| ウムラウト付きa | ウムラウト付きラテン小文字A | C3 A4 | %C3%A4 |
| チルダ付きn | チルダ付きラテン小文字N | C3 B1 | %C3%B1 |
| アクセント付きe | アキュートアクセント付きラテン小文字E | C3 A9 | %C3%A9 |
| ウムラウト付きu | ウムラウト付きラテン小文字U | C3 BC | %C3%BC |
| ユーロ記号 | ユーロ記号 | E2 82 AC | %E2%82%AC |
| ポンド記号 | ポンド記号 | C2 A3 | %C2%A3 |
| 円記号 | 円記号 | C2 A5 | %C2%A5 |
| CJKの「中」 | CJK統合漢字(中) | E4 B8 AD | %E4%B8%AD |
| キリル文字Ya | キリル大文字Ya | D0 AF | %D0%AF |
| アラビア文字Ba | アラビア文字Ba | D8 A8 | %D8%A8 |
マルチバイト文字のエンコード方法
UTF-8は可変長エンコード方式を採用しています。ASCIIの範囲(0〜127)の文字は1バイトを使用します。この範囲外の文字は2〜4バイトを使用します。パーセントエンコードする際には、UTF-8表現の各バイトがそれぞれ独立した%XXの3文字になります。
2バイト文字(U+0080〜U+07FF): これには、ラテン文字拡張、ギリシャ文字、キリル文字、アラビア文字のほとんどが含まれます。たとえば、ドイツ語のエスツェット(U+00DF)はUTF-8バイトC3 9Fにエンコードされ、それが%C3%9Fになります。
3バイト文字(U+0800〜U+FFFF): これには、CJK文字、ほとんどの記号、そして基本多言語面(BMP)が含まれます。たとえば、日本語のひらがな(U+3042)はUTF-8バイトE3 81 82にエンコードされ、それが%E3%81%82になります。
4バイト文字(U+10000〜U+10FFFF): これには、絵文字や追加文字が含まれます。たとえば、にっこり笑った顔の絵文字(U+1F600)はUTF-8バイトF0 9F 98 80にエンコードされ、それが%F0%9F%98%80になります。
// マルチバイトエンコードのJavaScriptによる実演
console.log(encodeURIComponent('u with umlaut'));
// 2バイト: "%C3%BC"
console.log(encodeURIComponent('CJK char'));
// 3バイト: "%E4%B8%AD"
console.log(encodeURIComponent('emoji'));
// 4バイト: "%F0%9F%98%80"
// デコードして確認できます
console.log(decodeURIComponent('%C3%BC')); // u with umlaut
console.log(decodeURIComponent('%E4%B8%AD')); // CJK char