Набор символов по умолчанию для URL-адресов при использовании на страницах HTML и в заголовках HTTP называется ISO-8859-1 или ISO Latin-1.
Это не то же самое, что UTF-8, и это не то же самое, что ASCII, но оно вписывается в один байт на символ. Диапазон от 0 до 127 очень похож на ASCII, а весь диапазон от 0 до 255 совпадает с диапазоном 0000-00FF Unicode.
Таким образом, вы можете сгенерировать ее из строки C #, приведя каждый символ к байту, или вы можете использовать Encoding.GetEncoding("iso-8859-1")
, чтобы получить объект для выполнения преобразования за вас.
(В этом наборе символов символ британского фунта равен 163.)
Фон
RFC говорит , что незашифрованный текст должен быть ограничен традиционным 7-битным диапазоном ASCII США, а все остальное (плюс специальные символы разделителя URL) должно быть закодировано. Но остается открытым вопрос о том, какой набор символов использовать для верхней половины 8-битного диапазона, что делает его зависимым от контекста, в котором отображается URL.
И этот контекст определяется двумя другими стандартами, HTTP и HTML, которые задают набор символов по умолчанию и которые вместе создают практически непреодолимую силу для разработчиков, предполагающих, что адресная строка содержит процентные кодировки, которые относятся к ISO- 8859-1.
ISO-8859-1 - это набор символов текстового содержимого, отправляемого по HTTP , если не указано иное. Таким образом, к тому времени, когда строка URL появляется в заголовке HTTP GET, она должна соответствовать ISO-8859-1.
Другим фактором является то, что HTML также использует стандарт ISO-8859-1 по умолчанию, а URL-адреса обычно создаются в виде ссылок на страницах HTML. Поэтому, когда вы создаете простую минимальную HTML-страницу в Блокноте, URL-адреса, которые вы вводите в этот файл, соответствуют ISO-8859-1.
В стандартах это иногда называют "дырой", но на самом деле это не так; просто HTML / HTTP заполняет пробел, оставленный RFC для URL.
Отсюда, например, совет по этой странице :
URL-кодировка символа состоит
символа "%", за которым следует
двузначное шестнадцатеричное представление
(без учета регистра) ISO-Latin
кодовая точка для символа.
(ISO-Latin - другое название для IS-8859-1).
Так много для теории. Вставьте это в блокнот, сохраните как файл .html и откройте в нескольких браузерах. Нажмите на ссылку, и Google должен найти британский фунт.
<HTML>
<BODY>
<A href="http://www.google.com/search?q=%a3">Test</A>
</BODY>
</HTML>
Он работает в IE, Firefox, Apple Safari, Google Chrome - у меня нет других доступных сейчас.