无需登录 数据私有 本地保存

Punycode编码转换工具 - 国际化域名在线解码

29
0
0
0

Punycode 编码转换工具

国际化域名(IDN)在线编码与解码,支持中文、日文、阿拉伯语等多语言域名转换

Unicode → Punycode

编码
已复制 ✓
示例: 例子.com 中国.cn 北京.中国 例え.テスト
双向转换

Punycode → Unicode

解码
已复制 ✓
示例: xn--fsq.com xn--fiqs8s.xn--fiqz9s xn--fiq228c.xn--fiqs8s
常见问题与知识点

Punycode 是一种将 Unicode 字符串转换为 ASCII 字符集的编码方式,定义在 RFC 3492 中。由于 DNS(域名系统)最初只支持 ASCII 字符(A-Z、0-9、连字符),而全球许多语言使用非 ASCII 字符(如中文、阿拉伯文、西里尔文等),Punycode 使得这些非英语字符能够被编码为 DNS 兼容的格式。编码后的域名标签以 xn-- 为前缀,例如"例子"编码为 xn--fsq。这样,国际化域名(IDN)就能在不修改 DNS 基础设施的前提下正常工作。

国际化域名(IDN,Internationalized Domain Name) 是指包含非 ASCII 字符的互联网域名。IDN 允许用户使用本地语言和文字(如中文、日文、韩文、阿拉伯文等)来注册和访问域名。在技术实现上,IDN 通过 Punycode 编码将 Unicode 域名转换为 ASCII 兼容格式(ACE),以便在现有的 DNS 系统中传输和解析。现代浏览器(Chrome、Firefox、Safari、Edge)均支持 IDN 的显示和访问。

xn--ACE(ASCII Compatible Encoding)前缀,用于标识一个域名标签使用了 Punycode 编码。所有经过 Punycode 编码的国际化域名标签都以 xn-- 开头。例如,中文域名"例子.com"编码后变为 xn--fsq.com。这个前缀让 DNS 服务器和应用程序能够识别该标签是 Punycode 编码的,需要解码才能还原为原始 Unicode 域名。该前缀由 IDNA(Internationalized Domain Names in Applications)规范定义。

Punycode 使用 Bootstring 算法(RFC 3492),其核心思想是:

1. 基础字符保留:所有 ASCII 字符(基本码点 0-127)直接复制到输出中。
2. 分隔符插入:如果存在非 ASCII 字符,在基本字符后插入连字符 - 作为分隔符。
3. 非基本字符编码:使用可变长度整数编码来表示非 ASCII 字符的 Unicode 码点及其在原字符串中的插入位置。编码使用 36 进制数字(a-z 和 0-9)表示。
4. 偏置调整:使用 adapt 函数动态调整编码阈值,以优化编码效率,使得常见字符的编码更短。

整个算法确保了编码结果只包含字母、数字和连字符,完全兼容 DNS 标准。

主要安全风险是 同形异义字攻击(Homograph Attack),即利用不同语言中外观相似的字符来仿冒合法域名。例如,使用西里尔字母 а(U+0430)替代拉丁字母 a(U+0061),视觉上几乎无法区分。攻击者可以注册一个看起来与知名网站完全相同的域名来实施钓鱼攻击。

防护措施:现代浏览器(Chrome、Firefox 等)对于混合使用多种文字系统的域名,会自动显示 Punycode 编码而非 Unicode 原文,以提醒用户注意潜在风险。此外,注册商和浏览器厂商维护了禁止混淆字符列表,减少此类攻击的可能性。用户在访问敏感网站时应仔细检查地址栏中的域名。

在大多数现代浏览器中,你可以通过以下方式查看域名的 Punycode 编码:

Chrome/Edge:在地址栏中,国际化域名通常显示为 Unicode 形式。如果浏览器检测到潜在的同形异义字攻击风险,会自动切换显示 Punycode 编码。
手动查看:将域名复制粘贴到本工具中进行编码,即可获得完整的 Punycode 表示。
命令行工具:在 Linux/macOS 系统中,可以使用 idn 命令(需安装 libidn)进行转换。
WHOIS 查询:域名注册信息中通常会同时显示 Unicode 形式和 Punycode 编码形式。

是的,所有主流现代浏览器都支持 IDN 和 Punycode,包括 Google Chrome(51+)、Mozilla Firefox(45+)、Apple Safari(10+)、Microsoft Edge(所有版本)以及移动端浏览器(iOS Safari、Android Chrome)。

浏览器在内部使用 Punycode 编码向 DNS 服务器发起查询,同时在地址栏中向用户显示原始的 Unicode 域名(除非检测到安全风险)。这意味着用户可以直接在地址栏输入中文域名(如"中国.cn"),浏览器会自动处理 Punycode 转换。对于较旧的浏览器或某些网络工具,可能需要手动使用 Punycode 编码形式。