• home > tools > NetTools > throughGFW >

    国际化域名编码:Punycode与中文域名

    Author:zhoulujun Date:

    punycode decode(string),将一个纯 ASCII 符号的 Punycode 字符串转换为 Unicode 符号的字符串。比如 周陆军,可以编码为 xn--i7q01el98g,避免zhoulujun 形成的多音字情况,其实并无卵用

    Punycode

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

    国际化域名IDNs  

    早期的DNS(Domain Name System)是只支持英文域名解析。在IDNs(国际化域名Internationalized Domain Names)推出以后,为了保证兼容以前的DNS,所以,对IDNs进行punycode转码,转码后的punycode就由26个字母+10个数字,还有“-”组成。

    国际化域名编码[1](英语:Punycode)是一种表示Unicode码和ASCII码的有限的字符集。例如中文上海”会被编码为“fhqz97e”。

    Punycode的目的是在于国际化域名标签(IDNA)的框架中,使这些(多语言)的域名可以编码为ASCII。编码语法在文档 RFC 3492 中规定。

    https://zh.wikipedia.org/wiki/国际化域名编码

    浏览器对punycode的支持    

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


    nodejs使用

    punycode 稳定度 内置到nodejs里面 可以是使用require('punyconde')引入

    punycode.decode(string)

    将一个纯 ASCII 符号的 Punycode 字符串转换为 Unicode 符号的字符串。

    punycode.encode(string)

    将一个 Unicode 符号的字符串转换为纯 ASCII 符号的 Punycode 字符串。

    punycode.toUnicode(domin)

    将一个表示域名的 Punycode 字符串转换为 Unicode。只有域名中的 Punycode 部分会转换,也就是说您在一个已经转换为 Unicode 的字符串上调用它也是没问题的。

    punycode.toASCII(tostring)

    将一个表示域名的 Unicode 字符串转换为 Punycode。只有域名的非 ASCII 部分会被转换,也就是说您在一个已经是 ASCII 的域名上调用它也是没问题的。


    中文域名解决了什么问题?

    输入麻烦

    中文里面有很多同音字,而域名是唯一的。因此输入域名时非常麻烦。

    假设要输入英文域名“ fuyeor.com ”和中文域名“复玥.com”,那么很明显英文域名“ fuyeor.com ”更简单,只需要输入 6 个(或者使用联想功能,输入4个字母)字母随后按下 Ctrl+Enter 即可。

    而中文域名 “复玥.com” 需要:1、输入 fuyue 五个字母,然后花十几秒进行选字,而且必须选对才能访问。然而某些输入法(例如手写输入法)经常出现识别错误,所有非常麻烦。

    如果是 “.网址”域名(比如复玥.网址),那就更麻烦了!我们来看看一共需要点击几次:

    1. 输入 fuyue 五个字母。(5次)

    2. 然后花十几秒进行选字。(约3次)

    3. 切换英文输入法。(1次)

    4. 打出点。(部分浏览器支持使用全角。代替半角 . ,但时至今日大部分国产浏览器仍然没有支持。)(1次)

    5. 切换中文输入法(1次)

    6. 输入 wangzhi (5次)

    7. 选择“网址” (1次)

    有些云服务不支持

    中文域名可能存在部分的云产品无法使用的情况,例如目前腾讯云 CDN 不支持中文域名(转码之后也不支持)。

    无法自动识别,用户意识不强

    输入英文域名 fuyeor.com 会自动识别网址,fuyeor.com 一看就知道这是一个网址。而输入 复玥.网址 基本上不会被识别,目前来看以后也不会自动识别(因为部分人的习惯是使用半角标点,极易误识别);

    并且用户对于中文域名的意识并不强,看到“复玥.网址”基本上不会认为这是一个域名 / 网址。

    中文域名的显示问题

    虽然新版浏览器可以正常显示中文域名,然而目前仍然有很多用户的浏览器处于旧版本,还有很多用户使用 Windows XP(不支持安装新版浏览器)、Windows 7 操作系统以及已被淘汰的 IE 浏览器和国产浏览器,例如 360 浏览器、QQ 浏览器等等。

    这些比较落后的浏览器在显示中文域名的时候会对中文域名进行“Punycode 转码”(见:IDN 域名的 Punycode 转码是什么意思?)进行转码后的中文域名会变成以 xn-- 开头的“乱码”,看起来似乎是恶意网站,用户体验极差。

    即使在最新版的 360 浏览器中,也不能正常显示中文域名。

    中文域名的国际化问题

    假设企业使用中文域名作为官网,那么就意味着不使用中文的人很难或彻底无法进入网站。

    一方面,不像其他外语,不使用中文的人不可能打出汉字,也就是说他们绝对无法通过域名进入网站,而对这个域名也是一头雾水,既不知道是什么意思,也不知道怎么搜这是什么意思,更无法读出。



    转载本站文章《国际化域名编码:Punycode与中文域名》,
    请注明出处:https://www.zhoulujun.cn/html/tools/NetTools/throughGFW/8890.html

    下一篇:Last page