Почему / как браузер решает, что goes.net переходит на xn--n3h.net
Если мы введем в Firefox или Chrome
http://☃.net/
Это берет нас к
http://xn--n3h.net/
Который является зеркалом http://unicodesnowmanforyou.com/
Что я не понимаю, так это то, по каким правилам юникод-снеговик может декодировать xn--n3h
, это не похоже на UTF-8 или urlencoding.
Я думаю, что нашел подсказку во время осмотра в python3, потому что:
>>> '☃'.encode('punycode')
b'n3h'
Но я до сих пор не понимаю xn--
часть. Как интернационализируются доменные имена, каков стандарт и где этот материал задокументирован?
1 ответ
Он использует схему кодирования, называемую Punycode (как вы уже обнаружили из проведенного вами тестирования Python), способную представлять символы Unicode в формате только ASCII.
Каждая метка (разделена точками, поэтому get.me.a.coffee.com
имеет пять меток), который содержит символы Unicode, кодируется в Punycode и имеет префикс строки xn--
,
Кодирующая метка сначала копирует все символы ASCII, а затем добавляет закодированные символы Unicode. Символы Юникода всегда после финала -
в метке, так что один добавляется после символов ASCII, если это необходимо.
Более подробную информацию можно найти на этой странице на сайте w3 и в RFC 3987. Подробнее о том, как Punycode на самом деле кодирует метки, см. На странице Википедии.