2015-06-11 6 views
1

Если мы наберем в Firefox или хромПочему/как делает браузер решить ☃.net идет в xn--n3h.net

http://☃.net/

Это подводит нас к

http://xn--n3h.net/

Что является зеркалом unicodesnowmanforyou.com

Что я не понимаю, по каким правилам юникодный снеговик может декодировать до xn--n3h, он не выглядит как utf-8 или urlencoding.

Я думаю, что нашел подсказку в то время как отводе вокруг в Python3, потому что:

>>> '☃'.encode('punycode') 
b'n3h' 

Но я до сих пор не понимает xn-- части. Как интернационализируются доменные имена, каков стандарт и где этот материал документирован?

ответ

4

Он использует схему кодирования, называемую Punycode (как вы уже узнали из теста Python, который вы сделали), способный отображать символы Unicode в формате ASCII.

Каждая метка (с разделителями точек, поэтому get.me.a.coffee.com имеет пять меток), которая содержит символы Юникода, кодируется в Punycode и имеет префикс строки xn--.

Кодировка меток сначала копирует все символы ASCII, а затем добавляет кодированные символы Юникода. Символы Юникода всегда после окончательного - в метке, поэтому один добавляется после символов ASCII, если это необходимо.

Подробнее см. В this page на сайте w3 и в RFC 3987. Подробнее о том, как Punycode на самом деле кодирует метки, см. the Wikipedia page.

+1

Ах, хорошо. Теперь я понимаю, что 'xn -' не является кодировкой, это спецификация. Кажется, он называется «префикс ACE» для любых поисковиков, которые находят этот пост. – wim

+1

Да, 'xn -' является префиксом ** ASCII совместимого кодирования (ACE) **, чтобы система DNS знала, что остальная часть метки закодирована в кодировке punycode. В вашем примере 'n3h' представляет собой кодированную в стиле Punycode форму' ☃'. –

 Смежные вопросы

  • Нет связанных вопросов^_^