首页/网络/协议速查/IDN 中文域名与 Punycode
DNS 与域名解析60 条

IDN 中文域名与 Punycode

非 ASCII 域名(中文、emoji)在 DNS 中以 Punycode(xn-- 前缀)存储与传输,浏览器/工具展示为 Unicode。

协议速查网络更新于 2026-10-13

IDN 与 Punycode 是什么

IDN(国际化域名)允许用中文、日文、emoji 等非 ASCII 字符注册域名。但 DNS 协议本身只认 ASCII,所以实际存储与传输使用的是 Punycode 编码(前缀为 xn--,算法见 RFC 3492),显示层再还原成 Unicode。IDNA2008(RFC 5890 至 5895)规定了转换、校验与禁止使用的字符规则。

基本信息

标准IDNA2008(RFC 5890 至 5895)
编码算法Punycode(RFC 3492)
前缀xn--
示例中文.cn 对应 xn--fiq228c.cn
相关能力SMTPUTF8(RFC 6531)支持国际化邮箱地址
常见坑证书、脚本、审计比对里都必须用 Punycode

典型使用场景

  • 中文域名注册与解析验证
  • 证书申请:SAN 必须按 Punycode 填写
  • 品牌保护:监控同形异义(形近字符)域名
  • 排障:工具显示乱码或解析失败时判断是编码问题还是域名问题
  • 邮件国际化:确认网关与邮件服务器是否支持 SMTPUTF8
  • 安全审计:以编码形式而非外观比对域名归属

转换与查询

转换与查询
# Unicode 与 Punycode 互转
python3 -c "print('中文.cn'.encode('idna').decode())"        # xn--fiq228c.cn
python3 -c "print('xn--fiq228c.cn'.encode().decode('idna'))" # 中文.cn

# 查询时用 Punycode 形式更稳,兼容性最好
dig +short xn--fiq228c.cn A

IDN 相关规矩

场景要求说明
域名注册注册商按 Punycode 登记后台看到的是 xn-- 形式
TLS 证书SAN 必须用 Punycode通配符只覆盖对应层级
邮件地址需要服务器支持 SMTPUTF8老网关常不支持,会静默失败
同形异义视觉相似字符易被冒用钓鱼风险,审计按编码比对
同形异义域名可被用于钓鱼:安全审计与证书比对必须以 Punycode 形式进行,肉眼无法区分形近字符。
部分老工具与库不支持 IDN,会把 xn-- 直接显示出来;排查「域名解析异常」时先确认传递的到底是 Unicode 还是 Punycode。
中文域名在不同浏览器与系统上的显示效果不一,遇到「复制出来的域名解析不了」时,先把它转成 Punycode 再测。
同一域名的 Unicode 形式在不同规范化下可能产生不同编码,注册与校验时应以注册商返回的 Punycode 为准。
国际化邮箱地址除协议支持外还需要用户端软件配合,实践中成功率参差不齐,关键业务场景建议同时保留 ASCII 地址。

易错点

  • 证书 SAN 里填 Unicode 域名会导致校验失败:必须使用 Punycode 形式
  • 邮件系统不支持 SMTPUTF8 时,国际化邮箱地址会被静默拒绝
  • 只看外观判断域名归属容易被形近字符欺骗:审计应按编码比对
  • 把 IDN 的 Unicode 形式直接写进脚本或配置,遇到不支持 IDN 的工具就会解析失败

数据来源与参考

  • RFC 5890(IDNA 定义)
  • RFC 3492(Punycode)
  • RFC 6531(SMTPUTF8)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌