国际化域名

从历史上看,Internet 域名仅包含 ASCII 符号。随着 Internet 的普及并在世界范围内被采用,有必要支持域名的国际化,特别是支持包含 Unicode 字符的域名。

采用了“应用程序中的国际化域名”(IDNA)机制作为将 Unicode 字符转换为标准 ASCII 域名的标准,从而保持了域名系统的稳定性。该系统执行查找服务,以将用户友好名称转换为网络地址。

国际化域名的示例:

  • http://清华大学\.cn

  • http://www\.транспорт\.com

如果您点击这些链接,将会看到地址栏中显示的 Unicode 域名被 ASCII 字符串 替换。

为了在您的应用程序中实现类似的功能,java.net.IDN类提供了在 ASCII 和非 ASCII 格式之间转换域名的方法。

MethodPurpose
toASCII(String)

toASCII(String, flag)
在将 IDN 发送到域名解析系统或将 IDN 写入需要 ASCII 字符的文件(例如 DNS 主文件)之前使用。如果 Importing 字符串 不符合RFC 3490,则这些方法将抛出IllegalArgumentException
toUnicode(String)
toUnicode(String, flag)
向用户显示名称时使用,例如从 DNS 区域获得的名称。此方法将字符串 从 ASCII 兼容编码(ACE)转换为 Unicode 代码点。这种方法永远不会失败。如果发生错误,Importing 字符串 将保持不变,并且将不做任何修改就返回。

可选的flag参数指定转换过程的行为。 ALLOW_UNASSIGNED标志允许包含 Unicode 3.2 中未分配的代码点。 USE_STD3_ASCII_RULES标志可确保遵守 STD-3 ASCII 规则。您可以单独使用这些标志,也可以在逻辑上进行“或”运算。如果两个标志都不需要,请使用该方法的单参数版本。