Punycode 编解码工具
国际化域名 IDN 与 ACE(xn-- 前缀)双向转换,逐标签处理,展示标签级转换详情与类型。基于 RFC 3492 Bootstring 算法纯原生实现,支持中文域名、多标签与 Emoji,数据仅在浏览器本地处理。
常见问题
什么是 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 标签(如 com、cn)原样保留;②解码模式下,以 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 在你本地执行,输入内容不会发送到任何服务器。