Подтвердить что ты не робот

Какой набор символов следует принимать закодированные символы в URL-адресе?

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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