2015-06-11 52 views
1

如果我們鍵入到Firefox或Chrome爲什麼/如何在瀏覽器決定☃.net去xn--n3h.net

http://☃.net/

這需要我們

http://xn--n3h.net/

這是一個鏡像unicodesnowmanforyou.com

我不明白的是什麼規則的unicode雪人可以解碼到xn--n3h,它看起來不像utf-8或urlencoding。

我想我找到了一個暗示,而在python3碴左右,這是因爲:

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

但我還是不明白的xn--部分。域名如何國際化,標準是什麼以及這些資料在哪裏記錄?

回答

4

它使用一種名爲Punycode的編碼方案(正如你已經從Python測試中發現的那樣),它能夠以純ASCII格式表示Unicode字符。

包含Unicode字符的每個標籤(由點分隔,因此get.me.a.coffee.com有五個標籤)以Punycode編碼,並以字符串xn--爲前綴。

標籤編碼首先複製所有的ASCII字符,然後附加編碼的Unicode字符。 Unicode字符始終位於標籤中的最後一個-之後,因此如果需要,可以在ASCII字符後添加一個。

更多詳細信息可以在w3站點和RFC 3987this page中找到。有關Punycode如何實際編碼標籤的詳細信息,請參見the Wikipedia page

+1

啊,很好。我現在明白,'xn - '不是一個編碼本身,它是一個規範。似乎被稱爲「ACE前綴」的任何谷歌發現這篇文章。 – wim

+1

是的,'xn - '是一個** ASCII兼容編碼(ACE)前綴**,用於讓DNS系統知道標籤的其餘部分是punycode編碼的。在你的例子中,'n3h'是'☃'的Punycode編碼形式。 –

相關問題