При создании URI из IRI, почему браузеры не конвертируют символы не ASCII в UTF-8?

Из RFC-3986, раздел 2.5:

Когда новая схема URI определяет компонент, который представляет текстовые данные, состоящие из символов из Универсального набора символов [UCS], данные сначала должны быть закодированы в виде октетов в соответствии с кодировкой символов UTF-8 [STD63]; то только те октеты, которые не соответствуют символам в незарезервированном наборе, должны быть закодированы в percent-. Например, символ A будет представлен как "A", символ LATIN CAPITAL LETTER A WITH GRAVE будет представлен как "% C3% 80", а символ KATAKANA LETTER A будет представлен как "% E3% 82% A2 ".

Итак, вот что такое правильный URL-адрес для кодирования символов Unicode? люди утверждают, что символы, отличные от ASCII в IRI, должны быть преобразованы в UTF-8 сначала до их кодирования.

Но я нашел одну образец образовательной веб-формы с приложением /x-www-form-urlencoded Content-Type, и я попытался заполнить ее некоторыми символами, отличными от ASCII, с использованием четырех браузеров (Firefox, Chrome Opera, IE) и посмотрел, какие POST-запросы Я попадаю в проводы. Оказалось, что кодирование символов% H1H2% H3H4...% HkHk + 1 является символом формы страницы при отправке формы.

Итак, для буквы "Ж", если для кодировки страницы формы установлено значение UTF-8, я получаю% 0D96, но если я переключусь на 8-разрядную Windows-1251, я получаю% C6, и если я переключусь на CP-1252 я get% 26% 231046, где% 26 is &,% 23 равно #, и, таким образом, я получаю xml Unicode число 'Ж': & # 1046, так как такой буквы в CP-1252 нет.

Поэтому мой вопрос в том, почему браузеры не конвертируют IRI в UTF-8, хотя это похоже на URL-адрес RFC.

Может быть, это потому, что http://является старой URI-схемой? Из https://en.wikipedia.org/wiki/percent-encoding:

Общий синтаксис URI требует, чтобы новые схемы URI, которые обеспечивают представление символьных данных в URI, должны, по сути, представлять символы из незарезервированного набора без перевода и должны преобразовывать все остальные символы в байты в соответствии с UTF-8, а затем percent- кодирует эти значения. Это требование было введено в январе 2005 года с публикацией RFC 3986. Схемы URI, введенные до этой даты, не затрагиваются.

Поэтому он сказал: схемы URI, введенные до этой даты, не затрагиваются. Но это похоже на хромое объяснение.

Кроме того, здесь https://unspecified.wordpress.com/2008/07/08/browser-uri-encoding-the-best-we-can-do/ один человек обнаружил ту же проблему, что и моя, и человек пытается ее объяснить как все это связано с неопределенной спецификацией HTML. Но я до сих пор не могу понять, как сюда входит стандарт HTML. Запрос выполняется браузером в любом случае, и браузер должен генерировать соответствующие URI.

Спасибо за внимание.

0
источник поделиться

Посмотрите другие вопросы по меткам или Задайте вопрос