# 国际化域名

> 原文： [https://docs.oracle.com/javase/tutorial/i18n/network/idn.html](https://docs.oracle.com/javase/tutorial/i18n/network/idn.html)

过去，Internet 域名仅包含 ASCII 符号。随着互联网的普及并被全世界采用，有必要支持域名的国际化，特别是支持包含 Unicode 字符的域名。

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

国际化域名的示例：

*   `http：//清华大学.cn`
*   `http：//www.транспорт.com`

如果您按照这些链接进行操作，您将看到地址栏中表示的 Unicode 域名被 ASCII 字符串替换。

为了在您的应用程序中实现类似的功能， [`java.net.IDN`](https://docs.oracle.com/javase/8/docs/api/java/net/IDN.html)类提供了在 ASCII 和非 ASCII 格式之间转换域名的方法。

| 方法 | 目的 |
| --- | --- |
| [`toASCII（String）`](https://docs.oracle.com/javase/8/docs/api/java/net/IDN.html#toASCII-java.lang.String-)
[`toASCII（String，flag）`](https://docs.oracle.com/javase/8/docs/api/java/net/IDN.html#toASCII-java.lang.String-int-) | 在将 IDN 发送到域名解析系统或将 IDN 写入需要 ASCII 字符的文件（例如 DNS 主文件）之前使用。如果输入字符串不符合 [RFC 3490](http://www.ietf.org/rfc/rfc3490.txt) ，则这些方法抛出 `IllegalArgumentException` 。 |
| [`toUnicode（String）`](https://docs.oracle.com/javase/8/docs/api/java/net/IDN.html#toUnicode-java.lang.String-)
[`toUnicode（String，flag）`](https://docs.oracle.com/javase/8/docs/api/java/net/IDN.html#toUnicode-java.lang.String-int-) | 在向用户显示名称时使用，例如从 DNS 区域获取的名称。此方法将字符串从 ASCII 兼容编码（ACE）转换为 Unicode 代码点。这种方法永远不会失败如果出现错误，输入字符串保持不变，并且不加修改地返回。 |

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