Punycode是一个根据RFC 3492标准而制定的编码系统,主要用于把域名从地方语言所采用的Unicode编码转换成为可用于DNS系统的编码。Punycode可以防止IDN欺骗。

各种中文域名其实就是 ”xn–“ + Punnycode + 域名后缀 组成的。如:

1
2
中文.com
xn--fiq228c.com

转码后的punycode就由26个字母+10个数字,还有“-”组成。一个国际化域名则是在Punycode编码的基础上,在前面加上“xn–”。

早期的 DNS 只支持英文域名解析。在 IDNs 推出以后,为了保证兼容以前的DNS,对IDNs进行了Punycode转码。
目前,因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS服务器上并不支持直接的中文域名解析,所有中文域名的解析都需要转成Punycode码,然后由DNS解析Punycode码。其实目前所说和各种浏览器完美支持中文域名,只是浏览器软里面主动加入了中文域名自动转码,不需要原来的再次安装中文域名转码控件来完成整个流程。