Punycode是一个根据RFC 3492标准而制定的编码系统,主要用於把域名从地方语言所采用的Unicode编码转换成为可用於DNS系统的编码。Punycode可以防止所谓的IDN欺骗。
早期的DNS(Domain Name System)是只支持英文域名解析。在IDNs(国际化域名Internationalized Domain Names)推出以后,为了保证兼容以前的DNS,所以,对IDNs进行punycode转码,转码后的punycode就由26个字母+10个数字,还有“-”组成。
目前,因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS服务器上并不支持直接的中文域名解析,所有中文域名的解析都需要转成punycode码,然后由DNS解析punycode码。其实目前所说和各种浏览器完美支持中文域名,只是浏览器软件里面主动加入了中文域名自动转码,不需要原来的再次安装中文域名转码控件来完成整个流程。
ps:punycode编码的域名在前面都加上了xn-- 来表明这是一个punycode编码。
Python实现中文域名punycode编码
要实现 中文域名 Punycode 的算法一句话就够了。
举例
print '谷歌'.decode('gbk').encode('punycode')
这样便得到了“谷歌”的punycode即flw351e,那么组合成网址:xn--flw351e.cn。
ps:上面代码中先对中文域名进行解码变为unicode编码,然后对unicode编码进行punycode编码。即不一定是decode(‘gbk’),要根据实际情况,最终将中文转换成正确的unicode编码即可。
#coding=utf-8 print 'cg部落'.decode('utf8').encode('punycode')