Punycode 编解码工具

国际化域名 IDN 与 ACE(xn-- 前缀)双向转换,逐标签处理,展示标签级转换详情与类型。基于 RFC 3492 Bootstring 算法纯原生实现,支持中文域名、多标签与 Emoji,数据仅在浏览器本地处理。

Punycode 结果(ACE)0
所有数据仅在你浏览器内处理,不会上传到任何服务器。Punycode 算法实现遵循 RFC 3492。

常见问题

什么是 Punycode?

Punycode 是一种用于表示国际化域名(IDN,Internationalized Domain Name)的编码方案,定义于 RFC 3492。它基于 Bootstring 算法,将 Unicode 字符串转换为仅含字母与数字的 ASCII 字符串,使包含中文、日文、韩文、阿拉伯文等非 ASCII 字符的域名能在传统 DNS 系统中解析。例如中文域名「例子.com」经 Punycode 编码后变为「xn--fsqu00a.com」。

什么是 IDN 与 ACE?

IDN(Internationalized Domain Name)指包含非 ASCII 字符的国际化域名,如「例子.公司」「中文.com」。ACE(ASCII Compatible Encoding)指 IDN 经 Punycode 编码后的 ASCII 兼容形式,所有 ACE 标签都以「xn--」前缀标识。DNS 系统只识别 ACE 形式,浏览器在地址栏显示 Unicode 形式供用户阅读,实际查询时使用 ACE 形式。

Punycode 算法的核心原理是什么?

Punycode 使用 Bootstring 算法,核心思路分三步:①分离基本字符:所有 ASCII 字符(< 128)直接复制到输出,并以「-」分隔基本部分与编码部分;②按码点升序编码非基本字符:从码点 128 开始升序遍历,每找到一个新字符就计算其位置 delta 值;③base 36 与 bias 自适应:将 delta 值用 base 36 编码(0-9a-z),并通过 bias 自适应算法调整阈值使输出分布均匀。固定常量为 base=36、tmin=1、tmax=26、skew=38、damp=700、initial_bias=72、initial_n=128。

为什么 ACE 标签以 xn-- 开头?

xn--」是 RFC 5891 规定的 ACE 前缀,用于让 DNS 解析器与浏览器识别这是一个 Punycode 编码的国际化标签。前缀本身在 DNS 中是合法的 ASCII 字符串,能被传统 DNS 系统正确处理。当浏览器看到「xn--」开头的标签时,会去掉前缀并执行 Punycode 解码,将结果显示为 Unicode 字符供用户阅读。

ACE 标签长度上限是多少?

根据 RFC 1035,单个 DNS 标签长度上限为 63 字符(含 xn-- 前缀)。本工具在编码时会校验:若编码后 ACE 标签长度超过 63 字符,会返回错误提示,避免生成无法在 DNS 中注册的非法域名。完整域名总长度上限为 253 字符。

本工具如何处理多标签域名?

本工具按点号「.」分隔标签,逐个标签独立判断与转换:①编码模式下,含非 ASCII 字符的标签会被 Punycode 编码并加 xn-- 前缀,纯 ASCII 标签(如 comcn)原样保留;②解码模式下,以 xn-- 开头的标签会被解码为 Unicode,非 ACE 标签原样保留。标签级转换详情面板会显示每个标签的输入、输出与类型(ASCII 保留 / 已编码 / 已解码)。

支持 Emoji 域名吗?

支持编码。Emoji 属于 Unicode 增补平面字符(码点 > 65535),本工具使用 for...of 按码点切分,正确处理代理对。例如「🎉.com」会被编码为「xn--q266a.com」。但需注意:①多数顶级域名注册商不支持 Emoji 域名注册;②即使能编码,浏览器与 DNS 系统对 Emoji 域名的支持也参差不齐;③实际使用中 Emoji 域名常被用于钓鱼与欺诈,建议谨慎。

Punycode 与 Base64/Base32 编码有什么区别?

三者目标场景不同:①Punycode 专为国际化域名设计,输出仅含字母数字与连字符(DNS 安全字符),可还原原始 Unicode;②Base64 通用二进制→文本编码,含 +/= 等特殊字符,不适合 DNS;③Base32 字符集更小(A-Z2-7),适合人工输入与二维码,但膨胀率(60%)高于 Punycode 在域名场景的实际表现。Punycode 是 IDN 场景的事实标准,不可被 Base64/Base32 替代。

数据会上传到服务器吗?

不会。本工具完全在浏览器内运行,所有编解码逻辑由 JavaScript 在你本地执行,输入内容不会发送到任何服务器。