Skip to main content
CheckTown
转换工具

Punycode 转换器:国际化域名

发布于 阅读约 5 分钟
本文目录

什么是 Punycode?

Punycode 是 RFC 3492 中定义的一种编码语法,它将 Unicode 字符转换为域名系统(DNS)所使用的有限 ASCII 字符集。它使国际化域名(IDN)——即包含重音符号、汉字或阿拉伯文字等非 ASCII 字符的域名——能够在仅支持 ASCII 的 DNS 基础设施中正常工作。

经过 Punycode 编码的域名会带有 xn-- 前缀(即 ACE 前缀),用以标示其中含有编码后的 Unicode。例如,域名 munchen.de 经 Punycode 编码后变为 xn--mnchen-3ya.de。Punycode 转换工具可在人类可读的 Unicode 形式与 DNS 兼容的 ASCII 形式之间进行相互转换。

Punycode 编码的工作原理

Punycode 使用一种 bootstring 算法,将 Unicode 码位表示为一串基本 ASCII 字符(a-z、0-9 和连字符)。

  • Unicode 分离——编码器识别出哪些是基本 ASCII 字符(原样保留),哪些是非 ASCII 字符(需要编码)
  • 增量编码——非 ASCII 字符被编码为表示其位置和码位的数值增量,并压缩成 36 进制数字
  • ACE 前缀——最终的编码字符串前会加上 xn-- 前缀,将其标记为 Punycode,从而生成 DNS 所使用的 ACE(ASCII 兼容编码)形式

免费试用 —— 无需注册

转换 Punycode →

何时使用 Punycode

只要你在仅支持 ASCII 的系统中处理国际化域名,就需要进行 Punycode 转换。

  • 域名注册——注册商要求以 Punycode 形式注册 IDN 域名,WHOIS 查询也使用 xn-- 编码形式
  • 含国际化域名的电子邮件——诸如 user@munchen.de 这样的邮箱地址,必须转换为 user@xn--mnchen-3ya.de 才能通过 SMTP 投递
  • DNS 配置——DNS 区域文件和记录对任何包含非 ASCII 字符的域名标签均使用 Punycode 形式

常见问题

Punycode 和 URL 编码是一回事吗?

不是。URL 编码(百分号编码)将字符转换为 %XX 十六进制序列,用于 URL 路径和查询字符串。Punycode 则专门将 Unicode 域名标签编码为 ASCII,供 DNS 使用。它们解决的是不同的问题——URL 编码用于 URL,Punycode 用于域名。

Punycode 会被用于钓鱼攻击吗?

会,这被称为 IDN 同形异义攻击。攻击者注册的域名中使用了看起来与拉丁字母完全相同的 Unicode 字符(例如西里尔字母“a”与拉丁字母“a”)。现代浏览器通过对可疑的混合文字域名显示其 Punycode xn-- 形式来加以防范。

所有浏览器都支持国际化域名吗?

是的。所有现代浏览器都会自动将 IDN 域名转换为 Punycode 以进行 DNS 解析,并在地址栏中显示其 Unicode 形式。这一转换对用户是透明的。不过,作为一种钓鱼防护措施,浏览器可能会对混用多种文字的域名显示其 Punycode 形式。

相关工具