В каком наборе символов следует указывать закодированные символы в URL-адресе? - PullRequest
25 голосов
/ 26 сентября 2008

RFC 1738 определяет синтаксис для URL и упоминает, что

URL пишутся только с графикой печатные символы
Набор кодированных символов US-ASCII. шестнадцатеричные октеты 80-FF не
используется в US-ASCII, а октеты 00-1F и 6F шестнадцатеричный представляют
управляющие персонажи; это должно быть закодированный.

Однако в нем не указано, какой кодовый набор представляют эти октеты.

RFC 2396 , кажется, пытается улучшить ситуацию, но:

Для оригинальных последовательностей символов, которые содержат не-ASCII символы, однако, ситуация более сложно. Интернет-протоколы, которые передают последовательности октетов, предназначенные для представляют символьные последовательности, как ожидается, обеспечат некоторый способ определение используемой кодировки, если их может быть несколько [RFC2277]. Однако в настоящее время в универсальный синтаксис URI для выполнения этой идентификации. Индивидуальный URI схема может потребовать одну кодировку, определить кодировку по умолчанию или предоставить способ указать используемую кодировку.

Ожидается, что систематическая обработка кодировки символов в URI будет разработан в качестве будущей модификации этой спецификации.

Есть ли какой-то однозначный способ, которым клиент может определить, каким набором символов интерпретировать закодированные октеты или каким образом сервер может определить, с помощью чего клиент кодировал?

Мне кажется, что большинство серверов по умолчанию используют UTF-8, но это де-факто выбор больше, чем указанный.

Ответы [ 2 ]

12 голосов
/ 26 сентября 2008

Согласно вашей цитате, URL являются ASCII. Вот и все.

URI OTOH, допускают большие кодировки; обычно UTF-8, как ты сам сказал.

Следует помнить, что URL-адреса являются подмножеством URI. Поэтому реальный вопрос в том, что из этого вы пишете в браузере?

Полагаю, вы можете написать URI, и браузер должен сделать все возможное, чтобы преобразовать его в URL (что и поддерживает HTTP / 1.1, AFAICR). Для не-ASCII символов это означает шестнадцатеричные коды, обычно кодирующие UTF-8.

4 голосов
/ 26 сентября 2008

Я полагаю, что вы ищете спецификацию RFC 3987 , которая описывает IRI - интернационализированные идентификаторы ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...