Стандарт HTTP или что-то определяет, какую кодировку следует использовать для специальных символов, прежде чем они будут кодированы в URL с% XXs?
Стандарт HTTP, нет. Но другой стандарт, IRI, может вступить в игру.
URI - это явные (когда-то% -кодированные) байтовые последовательности. Какие символы Unicode отображают эти байты, не указано ни стандартом URI, ни стандартом HTTP для URI http: -scheme.
Специально для параметров запроса: веб-браузеры будут использовать кодировку исходной страницы для отправки формы GET URL, поэтому, если у вас есть страница в ISO-8859-1 и вы добавили «é» в поле поиска, вы Вы получите '? search =% E9', но если вы сделаете то же самое на странице, кодированной как UTF-8, вы получите '? search =% C3% E9'. Если вы не предоставите страницу формы с каким-либо конкретным набором символов, который будет угадывать браузер, а вы этого не хотите, так как это сделает невозможным угадать, в каком формате будет представлено представление.
Что касается других частей URL, браузер не будет генерировать их сам, но если вы предоставите ему символы, не входящие в ASCII, в ссылках, они обычно закодируют их как UTF-8. Это ненадежно, так как зависит от настроек браузера и локали, поэтому лучше не использовать это в данный момент.
Стандарт, который разрешает использование в ссылках не-ASCII символов, IRI . IRI преобразуется в URI с помощью UTF-8 -% - кодирования большей части URL-адреса, но имя хоста преобразуется с использованием Punycode . Для совместимости лучше не полагаться на браузеры, понимающие IRI в ссылках. Вместо этого UTF-8-then -% - кодируют ваш путь и символы параметров самостоятельно. Они по-прежнему будут отображаться как правильные символы в адресной строке в современных браузерах; к сожалению, IE не будет отображать форму IRI декодированного символа во всех случаях, в зависимости от языковых настроек.
Вики IRI для греческого гамма-символа:
http://en.wikipedia.org/wiki/Γ
Закодировано в URI, это:
http://en.wikipedia.org/wiki/%CE%93