功能说明
在 Unicode 和 punycode 之间转换国际化域名——punycode 是 DNS 实际解析的 ASCII 形式(xn-- 标签)。输入 münchen.de,你会得到 xn--mnchen-3ya.de,这是注册商存储、解析器查询的名字。反方向则恢复出 Unicode 显示形式。本工具自身完整实现了 RFC 3492 的 bootstring 算法,并遵循 IDNA 规则:只编码包含非 ASCII 字符的标签,纯 ASCII 标签原样通过。
使用方法
- 选择方向:Unicode → Punycode 或 Punycode → Unicode。
- 输入域名,或点击示例芯片:
münchen.de、日本.jp、xn--mnchen-3ya.de、bücher.example。 - 结果以大号字体居中显示。复制结果,或复制一个携带你确切输入的分享链接。
Swap 按钮翻转方向,并把当前输出带入输入框。编码一个域名后点击 Swap,一次点击即可把它解码回来。
示例
| 输入 | 输出 |
|---|---|
münchen.de |
xn--mnchen-3ya.de |
Bücher.DE |
xn--bcher-kva.de - 依据 IDNA,输入先转为小写 |
café.fr |
xn--caf-dma.fr |
日本.jp |
xn--wgv71a.jp |
example.com |
example.com - 纯 ASCII 原样通过 |
xn--mnchen-3ya.de |
münchen.de |
Punycode 的工作原理
DNS 只认 ASCII。解析器、注册机构和缓存全部构建在字节而非 Unicode 之上。但人们希望使用自己文字的域名,于是国际化域名以“伪装”的形式传输:每个非 ASCII 标签被压缩成以 xn-- 为前缀的 ASCII 标签,浏览器只在查询成功后才显示 Unicode 形式。这个前缀就是“把我解码以恢复真实标签”的标记。
压缩是巧妙之处。像 münchen 这样的标签大部分是 ASCII 字母,只带一个“外来者”(ü)。Punycode 在 RFC 3492 中定义为 bootstring 算法,它把外来字符及其位置打包成一段由 36 进制数字和连字符组成的紧凑后缀:
- 按顺序复制 ASCII 字符:
mnchen。 - 追加连字符分隔符:
mnchen-。 - 追加增量编码的值,指名每个被插入的字符及其位置:
3ya。
结果 xn--mnchen-3ya 唯一属于 münchen——算法可逆,对解码结果再编码总是得到同一个标签。解码时在分隔符处拆开标签,重放这些增量,把每个 Unicode 字符重新插回其记录的位置。
IDNA 还有两条收尾规则:编码前先把域名转为小写,因为域名的比较不区分大小写,且 ACE 形式永远是小写。解码只处理以 xn-- 开头的标签;其余原样通过,所以 not--valid 保持 not--valid 不变。一个格式错误的 xn-- 标签——坏数字、截断、溢出——会让整个域名被拒绝,工具也会如实告知。
补充说明
- 私密: 所有转换 100% 在客户端运行——你的域名永远不会离开浏览器。
- 钓鱼警示:
xn--标签可以模仿熟悉的名称(同形异义字攻击)。当一个标签内混用多种文字时,浏览器会显示 punycode 形式;本工具让你看到任何标签隐藏的真实内容。 - 相关工具: URL Inspector、HTML Entity Encoder、Slugify。