国际化域名
从历史上看,Internet 域名仅包含 ASCII 符号。随着 Internet 的普及并在世界范围内被采用,有必要支持域名的国际化,特别是支持包含 Unicode 字符的域名。
采用了“应用程序中的国际化域名”(IDNA)机制作为将 Unicode 字符转换为标准 ASCII 域名的标准,从而保持了域名系统的稳定性。该系统执行查找服务,以将用户友好名称转换为网络地址。
国际化域名的示例:
-
http://清华大学\.cn
-
http://www\.транспорт\.com
如果您点击这些链接,将会看到地址栏中显示的 Unicode 域名被 ASCII 字符串 替换。
为了在您的应用程序中实现类似的功能,java.net.IDN类提供了在 ASCII 和非 ASCII 格式之间转换域名的方法。
Method | Purpose |
---|---|
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 规则。您可以单独使用这些标志,也可以在逻辑上进行“或”运算。如果两个标志都不需要,请使用该方法的单参数版本。