模块 java.base
 java.net

类 IDN

java.lang.Object
java.net.IDN

public final class IDN extends Object
提供在普通 Unicode 表示和 ASCII 兼容编码 (ACE) 表示之间转换国际化域名 (IDN) 的方法。国际化域名可以使用整个 Unicode 范围内的字符,而传统域名仅限于 ASCII 字符。 ACE 是一种仅使用 ASCII 字符的 Unicode 字符串编码,可与仅理解传统域名的软件(如域名系统)一起使用。

国际化域名在 RFC 3490 中定义。 RFC 3490 定义了两种操作:ToASCII 和 ToUnicode。这2个操作使用了名称准备算法,它是字符串准备的profile,和Punycode算法来来回转换域名字符串。

上述转换过程的行为可以通过各种标志进行调整:

  • 如果使用 ALLOW_UNASSIGNED 标志,则要转换的域名字符串可以包含 Unicode 3.2 中未分配的代码点,这是 IDN 转换所基于的 Unicode 版本。如果未使用该标志,则此类未分配代码点的存在将被视为错误。
  • 如果使用了 USE_STD3_ASCII_RULES 标志,则会根据 RFC 1122RFC 1123 检查 ASCII 字符串。如果他们不符合要求,这是一个错误。
这些标志可以逻辑或运算在一起。

安全考虑对于国际化域名支持很重要。例如,英文域名可能是同形异义通过替换非拉丁字母恶意拼写错误。 Unicode 技术报告 #36 讨论了 IDN 支持的安全问题以及可能的解决方案。应用程序有责任在使用国际域名时采取足够的安全措施。

自从:
1.6
  • 字段详细信息

    • ALLOW_UNASSIGNED

      public static final int ALLOW_UNASSIGNED
      允许处理未分配代码点的标志
      参见:
    • USE_STD3_ASCII_RULES

      public static final int USE_STD3_ASCII_RULES
      标记以打开针对 STD-3 ASCII 规则的检查
      参见:
  • 方法详情

    • toASCII

      public static String  toASCII(String  input, int flag)
      将字符串从 Unicode 转换为 ASCII 兼容编码 (ACE),如 RFC 3490 的 ToASCII 操作所定义。

      ToASCII 操作可能会失败。如果其中任何一步失败,ToASCII 就会失败。如果 ToASCII 操作失败,将抛出 IllegalArgumentException。在这种情况下,不应在国际化域名中使用输入字符串。

      标签是域名的独立部分。如 RFC 3490 中所定义,原始的 ToASCII 操作仅对单个标签进行操作。此方法可以处理标签和整个域名,假设域名中的标签始终由点分隔。以下字符被识别为点:\u002E(句号)、\u3002(表意句号)、\uFF0E(全角句号)和 \uFF61(半角表意句号)。如果使用点作为标签分隔符,此方法还会在输出翻译字符串中将它们全部更改为 \u002E(句号)。

      参数:
      input - 要处理的字符串
      flag - 进程标志;可以是 0 或可能标志的任何逻辑或
      返回:
      翻译的String
      抛出:
      IllegalArgumentException - 如果输入字符串不符合 RFC 3490 规范
    • toASCII

      public static String  toASCII(String  input)
      将字符串从 Unicode 转换为 ASCII 兼容编码 (ACE),如 RFC 3490 的 ToASCII 操作所定义。

      这个便捷方法的工作方式就像调用两个参数的对应方法一样,如下所示:

      toASCII (输入,0);
      参数:
      input - 要处理的字符串
      返回:
      翻译的String
      抛出:
      IllegalArgumentException - 如果输入字符串不符合 RFC 3490 规范
    • toUnicode

      public static String  toUnicode(String  input, int flag)
      将字符串从 ASCII 兼容编码 (ACE) 转换为 Unicode,如 RFC 3490 的 ToUnicode 操作所定义。

      ToUnicode 永远不会失败。如果出现任何错误,输入字符串将原封不动地返回。

      标签是域名的独立部分。如 RFC 3490 中所定义,原始的 ToUnicode 操作仅对单个标签进行操作。此方法可以处理标签和整个域名,假设域名中的标签始终由点分隔。以下字符被识别为点:\u002E(句号)、\u3002(表意句号)、\uFF0E(全角句号)和 \uFF61(半角表意句号)。

      参数:
      input - 要处理的字符串
      flag - 进程标志;可以是 0 或可能标志的任何逻辑或
      返回:
      翻译的String
    • toUnicode

      public static String  toUnicode(String  input)
      将字符串从 ASCII 兼容编码 (ACE) 转换为 Unicode,如 RFC 3490 的 ToUnicode 操作所定义。

      这个便捷方法的工作方式就像调用两个参数的对应方法一样,如下所示:

      toUnicode (输入,0);
      参数:
      input - 要处理的字符串
      返回:
      翻译的String