Punycode 是国际化域名(IDN)的编码方案,把中文等非拉丁字符转成以
xn--开头的 ASCII 字符串,供域名系统处理。例如.中国在底层写作xn--fiqs8s。显示层是中文,传输与存储层是编码。
域名系统只能处理 ASCII 字符,中文等非拉丁字符无法直接写入。Punycode 是解决这个问题的编码方案:把一串非 ASCII 字符转成一串 ASCII 字符,并以 xn-- 作为前缀标识。例如顶级域 .中国 在技术上写作 xn--fiqs8s,例子.中国 在底层也是一段 xn-- 编码。
Punycode 负责的是存储和传输环节。用户在浏览器地址栏输入或看到的是中文,浏览器在背后完成中文与 Punycode 之间的转换,域名系统内部始终只处理编码后的 ASCII 字符串。注册中文域名时,提交给注册局的就是 Punycode 形式。
由于部分拉丁字母与其他文字字形相似,国际化域名也带来一类仿冒风险:用西里尔字母或希腊字母替换域名中的拉丁字母,可以构造出与目标域名外观几乎一致的地址。浏览器和注册机构对此有相应的检测与展示措施。