功能说明
域名系统(DNS)在传输层面只接受 ASCII 字符,而「中文.中国」这类国际化域名(IDN)包含非 ASCII 字符,必须先按 RFC 3492 定义的 Punycode 算法编码成以 xn-- 开头的 ASCII 形式才能被解析。本工具实现了完整的 Punycode 编解码,支持单个域名与整条 URL 的双向转换,全部运算在浏览器本地完成。
算法实现说明
本工具内置了纯 JavaScript 编写的 RFC 3492 编解码实现,没有依赖任何第三方库,也没有使用浏览器的全局 punycode 对象——该对象早已从主流浏览器与 Node.js 标准库中移除,直接调用会报错。编码遵循标准的 Bootstring 参数:基数 36、tmin 为 1、tmax 为 26、skew 为 38、damp 为 700、初始偏置 72、初始 n 为 128,并按码点遍历字符串,能正确处理增补平面字符。
转换规则
域名按点号切分成若干标签(label)逐个处理。编码方向:只有包含非 ASCII 字符的标签才会被转换并加上 xn-- 前缀,纯 ASCII 标签原样保留,这与 IDNA 规范一致。解码方向:只有以 xn-- 开头的标签才会被还原,其余标签原样保留。为方便中文输入,全角句号「。」、「.」、「。」会被自动识别为域名分隔点。
整条 URL 模式
开启「转换整条 URL」后,工具会拆出协议、用户信息、主机名、端口与路径查询片段,只对主机名做转换,其余部分原样保留。这一点很重要:路径与查询参数中的中文应当使用 percent-encoding(URL 编码)而不是 Punycode,两者不能混用。若你需要处理路径中的中文,请改用 URL 编码工具。
常见注意事项
编码结果统一为小写,因为 DNS 标签大小写不敏感。单个标签编码后长度不能超过 63 字节,整个域名不超过 253 字节,超长会被 DNS 拒绝。此外浏览器出于防钓鱼考虑,对混用不同文种(如西里尔字母冒充拉丁字母)的域名会直接显示 xn-- 原形而不显示中文,这属于正常的安全策略。
使用场景
中文域名注册与备案核对、Nginx 与证书配置中填写 ASCII 域名、邮件与日志中出现的 xn-- 串还原排查、爬虫与网络工具的域名规范化。
温馨提示
- 您的反馈将帮助我们改进产品体验
- 反馈内容会匿名保存,保护您的隐私
- 我们会认真阅读每一条反馈
暂无反馈记录
