Java教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及后续版本中更新的语言特性的摘要。
请参阅JDK发布说明,了解所有JDK版本的新功能、增强和已删除或弃用选项的信息。
在历史上,互联网域名只包含ASCII字符。随着互联网的普及和全球范围内的应用,支持域名国际化变得必要,特别是支持包含Unicode字符的域名。
国际化域名应用(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规则。您可以单独使用这些标志或逻辑上OR在一起。如果不需要任何标志,请使用单参数版本的方法。