リファレンス8分で読めます

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

関連記事

無料ツールを試す