浏览器为什么/如何决定☃.net转到xn--n3h.net

时间:2015-06-11 01:57:08

标签: url browser unicode character-encoding iri

如果我们输入firefox或chrome

http://☃.net/

它需要我们

http://xn--n3h.net/

这是unicodesnowmanforyou.com

的镜像

我不明白的是unicode雪人可以解码为xn--n3h的规则,它看起来不像utf-8或urlencoding。

我想我在python3中找到了一个提示,因为:

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

但我仍然不理解xn--部分。域名如何国际化,标准是什么?这些内容记录在哪里?

1 个答案:

答案 0 :(得分:4)

它使用名为Punycode的编码方案(正如您已经从Python测试中发现的那样),能够以纯ASCII格式表示Unicode字符。

包含Unicode字符的每个标签(由点分隔,因此get.me.a.coffee.com有五个标签)在Punycode中编码,并以字符串xn--为前缀。

标签编码首先复制所有ASCII字符,然后附加编码的Unicode字符。 Unicode字符始终位于标签中的最终-之后,因此如果需要,可在ASCII字符后添加一个。

更多细节可以在w3网站的this pageRFC 3987中找到。有关Punycode如何实际编码标签的详细信息,请参阅the Wikipedia page