什么是Punycode?

今天在看 Katana 源码时看到其中的 HostString 有对一个叫punycode的处理过程,

网上查了查资料原来是这么回事:

原文地址:Punycode

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码。其实目前所说和各种浏览器完美支持中文域名,只是浏览器软件里面主动加入了中文域名自动转码,不需要原来的再次安装中文域名转码控件来完成整个流程。

说白了,如很早以前炒得火热的中文域名,如 阿里巴巴.com,由于DNS只认识英文,所以就需要转换为punycode交给DNS:xn--tsta8290bfzd.com

C#中有现成的工具直接来做这件事情:

1 System.Globalization.IdnMapping idn = new System.Globalization.IdnMapping();
2 
3 Console.WriteLine(idn.GetUnicode("xn--tsta8290bfzd.com"));//阿里巴巴.com
4 Console.WriteLine(idn.GetAscii("阿里巴巴.com"));//xn--tsta8290bfzd.com

 

posted @ 2017-08-17 15:54  Ghost.KR  阅读(409)  评论(0编辑  收藏  举报