Why/how 浏览器是否决定 ☃.net 去 xn--n3h.net

Why/how does the browser decide ☃.net goes to xn--n3h.net

如果我们输入 firefox 或 chrome

http://☃.net/

它带我们去

http://xn--n3h.net/

这是unicodesnowmanforyou.com

的镜像

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

我想我在 python3 中闲逛时发现了一个提示,因为:

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

但是xn--部分我还是没看懂。域名是如何国际化的,标准是什么,这些东西在哪里记录?

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

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

为前缀

标签编码首先复制所有的ASCII字符,然后追加编码的Unicode字符。 Unicode 字符总是在标签中最后的 - 之后,因此如果需要,在 ASCII 字符之后添加一个。

可以在 this page over at the w3 site, and in RFC 3987. For details on how Punycode actually encodes labels, see the Wikipedia page 中找到更多详细信息。