Справочник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), зарезервированным символом, используемым по своему назначению, или триплетом процентного кодирования, должен быть закодирован. На практике это означает, что большинство неалфавитно-цифровых символов следует кодировать в компонентах 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, а затем каждый байт кодируется процентным кодированием по отдельности. Многобайтовые символы дают несколько триплетов процентного кодирования.

Символ Описание Байты 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
Иероглиф zhong Унифицированный иероглиф CJK (середина) E4 B8 AD %E4%B8%AD
Кириллическая Я Кириллическая заглавная буква Я D0 AF %D0%AF
Арабская Ба Арабская буква Ба D8 A8 %D8%A8

Как кодируются многобайтовые символы

UTF-8 использует схему кодирования переменной длины. Символы из диапазона ASCII (0-127) занимают один байт. Символы за пределами этого диапазона занимают от двух до четырёх байтов. При процентном кодировании каждый байт представления UTF-8 становится отдельным триплетом %XX.

Двухбайтовые символы (U+0080 — U+07FF): к ним относятся большинство расширенных латинских, греческих, кириллических и арабских символов. Например, немецкая буква эсцет (U+00DF) кодируется в байты UTF-8 C3 9F, что даёт %C3%9F.

Трёхбайтовые символы (U+0800 — U+FFFF): к ним относятся иероглифы CJK, большинство символов и вся Основная многоязычная плоскость. Например, японский символ хираганы (U+3042) кодируется в байты UTF-8 E3 81 82, что даёт %E3%81%82.

Четырёхбайтовые символы (U+10000 — U+10FFFF): к ним относятся эмодзи и дополнительные символы. Например, эмодзи улыбающегося лица (U+1F600) кодируется в байты UTF-8 F0 9F 98 80, что даёт %F0%9F%98%80.

// Демонстрация многобайтового кодирования на JavaScript
console.log(encodeURIComponent('u с умлаутом'));
// Два байта: "%C3%BC"

console.log(encodeURIComponent('символ CJK'));
// Три байта: "%E4%B8%AD"

console.log(encodeURIComponent('эмодзи'));
// Четыре байта: "%F0%9F%98%80"

// Проверить можно с помощью декодирования
console.log(decodeURIComponent('%C3%BC'));  // u с умлаутом
console.log(decodeURIComponent('%E4%B8%AD')); // символ CJK

Похожие статьи

Попробуйте наши бесплатные инструменты