# 网络资源国际化

在现代 Internet 社区中,许多用户不再满足于仅使用 ASCII 符号来标识域名或 web 资源。例如,他们希望能够使用阿拉伯文或中文的本地字符注册一个新域。这就是为什么网络资源国际化是万维网拓宽视野的基石。

本课描述了网络域名资源的国际化。

# 国际化域名

历史上,一个互联网域名只包含 ASCII 符号。随着 Internet 的普及和在世界各地的采用,支持域名国际化变得很有必要,特别是支持包含 Unicode 字符的域名。

采用 IDNA (Internationalizing Domain Names in Applications, IDNA) 机制作为标准,将 Unicode 字符转换为标准 ASCII域名,从而保持域名系统的稳定性。该系统执行查找服务,将用户友好的名称转换为网络地址。

国际化域名的示例:

  • http://清华大学.cn
  • http://www.транспорт.com

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

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

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

可选的标志参数指定转换过程的行为。

  • ALLOW_UNASSIGNED 标志允许包含 Unicode 3.2 中未分配的代码点。
  • USE_STD3_ASCII_RULES 标志确保 STD-3 ASCII 规则得到遵守。

这些标志可以单独使用,也可以通过 | 一起使用。如果这两个标志都不需要,则使用方法的单参数版本。