模块  java.base
软件包  java.net

Class IDN


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

    国际化域名在RFC 3490中定义。 RFC 3490定义了两个操作:ToASCII和ToUnicode。 这两个操作采用Nameprep算法,这是一个Stringprep的配置文件,以及Punycode算法来回转换域名字符串。

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

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

    在国际化域名支持方面,安全考虑很重要。 例如,英文域名可能是同形词 - 通过替换非拉丁字母而恶意拼写错误。 Unicode Technical Report #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(input, 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(input, 0);
        参数
        input - 要处理的字符串
        结果
        翻译 String