Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
过去,Internet 域名仅包含 ASCII 符号。随着互联网的普及并被全世界采用,有必要支持域名的国际化,特别是支持包含 Unicode 字符的域名。
应用程序中的 Internationalizing Domain Names(IDNA)机制被用作将 Unicode 字符转换为标准 ASCII 域名的标准,从而保持域名系统的稳定性。该系统执行查找服务以将用户友好名称转换为网络地址。
国际化域名的示例:
如果你按照这些链接进行操作,你将看到地址栏中表示的 Unicode 域名被 ASCII 字符串替换。
要在应用程序中实现类似的功能,java.net.IDN 类提供了在 ASCII 和非 ASCII 格式之间转换域名的方法。
方法 | 目的 |
---|---|
toASCII(String) toASCII(String, flag) |
在将 IDN 发送到域名解析系统或将 IDN 写入需要 ASCII 字符的文件(例如 DNS 主文件)之前使用。如果输入字符串不符合 RFC 3490,则这些方法抛出 IllegalArgumentException。 |
toUnicode(String) toUnicode(String, flag) |
在向用户显示名称时使用,例如从 DNS 区域获取的名称。此方法将字符串从 ASCII 兼容编码(ACE)转换为 Unicode 代码点。这种方法永远不会失败如果出现错误,输入字符串保持不变,并且不加修改地返回。 |
可选的 flag 参数指定转换过程的行为。ALLOW_UNASSIGNED 标志允许包含 Unicode 3.2 中未分配的代码点。USE_STD3_ASCII_RULES 标志确保遵守 STD-3 ASCII 规则。你可以单独使用这些标志,也可以逻辑“或”在一起使用。如果不需要任何标志,请使用该方法的单参数版本。