IDN到Punycode转换

使用我们的IDN到Punycode转换工具轻松将IDN转换为Punycode并进行反向转换,确保域名的正确性。

2 个评分中的 5 个
IDN到Punycode转换

IDN到Punycode转换是一款免费工具,可将国际化域名转换为 Punycode ASCII,也能把 Punycode 转回易读的 Unicode 文本。

什么是 Punycode,为什么需要它?

Punycode 是 IDNA 转换机制的一部分,用于将 Unicode U-label 转换为 ASCII A-label。借助 Punycode,包含 ü、é 或 漢 等字符的名称也能通过原本只支持基本拉丁字母、数字和连字符的系统传输。

IDNA A-label 以 xn-- 开头。这个前缀会告诉支持 IDNA 的应用程序,后面的字符是某个 U-label 的 Punycode 表示形式。点号仍作为分隔符,因此域名中的每个标签都会单独转换。

Punycode 用于应用程序国际化域名,这套机制通常简称为 IDNA。IDNA 还负责验证和字符处理,Punycode 则为符合条件的 Unicode 标签提供 ASCII 表示形式。

Punycode 是编码,不是加密。任何人都可以把 ASCII 形式转回 Unicode,因此它不能提供保密性,也绝不能用于隐藏信息。

示意图:文本经由 IDN到Punycode转换 双向转换

如何转换国际化域名?

要转换 Unicode 文本,请将其输入转换为Punycode/ASCII;要转换 ASCII A-label,请将其输入转换为IDN/文本。对应结果会显示在 Punycode/ASCII 或 IDN/文本中。

  1. 只复制需要转换的域名或标签,不要包含两侧的引号。
  2. 如果 Unicode 文本中包含带重音符号的字符或非拉丁字符,请使用转换为Punycode/ASCII。
  3. 如果输入的是 ASCII A-label,请使用转换为IDN/文本。
  4. 将结果用于 DNS、电子邮件设置或应用程序配置前,请逐一检查转换后的每个标签。
digily.link 上的 IDN到Punycode转换 工具及其输入表单

此转换工具使用 PHP 的 idn_to_ascii 和 idn_to_utf8 函数。处理在服务器端完成。你输入的内容会通过 HTTPS 发送到服务器,但不会被存储。

域名转换示例

通过一个简单的转换示例,可以看出显示名称与其 DNS 兼容形式之间的关系。

输入 münchen.de

输出 xn--mnchen-3ya.de

反向转换该输出后,会得到 münchen.de。只包含 ASCII 字符的标签 de 无需转换,而包含 ü 的标签会变成以 xn-- 开头的标签。

输入内容必须是有效的域名文本。相关格式对常见情况的处理方式如下:

  • 带重音符号的字母和非拉丁字母:符合条件的 Unicode 标签会通过 IDNA 和 Punycode 转换为 ASCII 表示形式。
  • 点号:每个点号都会分隔不同标签。因此,一个域名可以同时包含普通 ASCII 标签和编码后的标签。
  • 数字和普通连字符:这些字符本身已经属于 ASCII,通常会保持可读,但仍须遵守域名语法规则。
  • 空格:普通 DNS 主机标签中不能包含空格。如果不小心输入了空格,应将其删除,不要指望 Punycode 把它保留为域名的一部分。
  • 标点符号:句点用于分隔标签,但 URL 路径、端口或查询字符串中的字符并不属于主机名。
  • 空输入或过长输入:输入为空时,没有可供转换的域名。DNS 还将每个编码后标签限制为 63 个八位字节,因此视觉上较短的 Unicode 标签在转换后也可能超出长度限制。
IDN到Punycode转换 工具生成的结果示例

为什么 Punycode 转换失败或结果不符合预期?

转换失败通常是因为输入内容不是有效的 IDN 文本、包含格式错误的 A-label,或事先经过了其他编码。转换为 IDN/文本时,如果普通 ASCII 输入并非 A-label,它可能会保持不变。在手动修改字符之前,先确认原始内容是 Unicode U-label、ASCII A-label,还是经过 URL 编码的主机名。

  • A-label 格式错误或编码类型不对:格式错误的 xn-- 标签可能无法转换。Base64、十六进制文本和经过百分号编码的 URL 都不是 Punycode。
  • 不受支持的字符:Punycode 可以表示 Unicode 值,但 IDNA 规则和域名注册管理机构可能会拒绝特定字符、字符组合或书写系统。
  • 标签过长:DNS 将每个编码后标签限制为 63 个八位字节,因此 Unicode 标签在转换后可能超出长度限制。
  • 输入不完整:如果复制主机名时带上了括号、端口号或 HTML 属性的一部分,输入值可能会变得无效。
  • 重复编码的输入:如果 Punycode 域名中的字符经过了显式或非规范的百分号编码,它们可能会显示为百分号序列。请先用 URL解码工具解码这一层 URL 编码,再转换得到的域名。
  • 输入的是二进制数据而非文本:IDN 转换适用于 Unicode 域名文本。任意文件的二进制字节在被当作文本处理时,可能无法通过验证,也可能产生无意义的字符。

哪些地方会遇到 Punycode?

Punycode 主要出现在域名、DNS 记录、浏览器地址处理,以及使用 ASCII 存储主机名的系统中。浏览器可能显示易读的国际化域名,也可能保留 xn-- 形式,具体取决于其安全规则和涉及的字符。

电子邮件地址中,@ 符号后面的域名可以使用 Punycode,但它不会对 @ 符号前面的邮箱名称进行编码。JSON 载荷和查询字符串在传递主机名时也可能包含 Punycode,但普通文本并不会因为采用 JSON 或查询字符串语法就必须使用 Punycode。

数据 URI 的内容通常使用百分号编码或 Base64。只有当其中的文本恰好包含国际化主机名时,才会出现 Punycode。同样,路径或查询参数值应使用 URL编码工具,主机名本身则使用 Punycode。

常见问题

可以把完整 URL 粘贴到 IDN 转换工具中吗?

更稳妥的做法是提取主机名,只转换这一部分。协议方案、端口、路径、片段和查询参数各有不同的语法规则,其中的字符可能需要使用 URL 编码,而不是 Punycode。

域名中包含 xn-- 标签,就说明网站不安全吗?

不是。许多正常的国际化域名都会使用 xn-- 标签。不过,不同书写系统中外形相似的字符可能被用于制作误导性名称。因此,在输入密码或付款信息之前,请检查解码后的拼写,并确认它是否属于你预期的机构。

Emoji 可以用在 Punycode 域名中吗?

不可以。尽管 Punycode 算法可以编码 Emoji 的码位,但 IDNA 域名标签不允许使用 Emoji。域名注册管理机构还可能进一步限制可使用的书写系统和符号。

为什么浏览器显示 Punycode,而不是 Unicode?

浏览器可能会出于显示安全策略而保留 ASCII 形式,例如标签混用了多种书写系统、包含与仿冒有关的字符,或不符合浏览器的显示策略。这是一项显示层面的安全保护措施,并不表示转换结果有误。

转换后的域名一定能在 DNS 中使用吗?

不一定。转换成功并不能证明该域名已经注册、可以注册,或得到相关域名注册管理机构的允许。使用结果前,请核对标签长度、检查易读形式的拼写,并确认注册管理机构接受其中涉及的字符。

热门工具