Module  java.base
软件包  java.net

Class IDN



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

    国际化域名定义在RFC 3490 RFC 3490定义了两个操作:ToASCII和ToUnicode。 这两个操作采用Nameprep算法,它是StringprepPunycode算法的轮廓来转换域名字符串的算法。

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

    • 如果使用ALLOW_UNASSIGNED标志,则要转换的域名字符串可以包含Unicode 3.2中未分配的代码点,这是以IDN转换为基础的Unicode版本。 如果不使用标志,则将这种未分配的代码点的存在视为错误。
    • 如果使用USE_STD3_ASCII_RULES标志,则会对RFC 1122RFC 1123检查ASCII字符串。 如果不符合要求,这是一个错误。
    这些标志可以在逻辑上进行OR。

    安全考虑在国际化域名支持方面很重要。 例如,英文域名可homographed -以非拉丁字母取代恶意拼写错误。 Unicode Technical Report #36讨论了IDN支持的安全问题以及可能的解决方案。 应用程序负责在使用国际域名时采取足够的安全措施。

    从以下版本开始:
    1.6
    • 字段详细信息

      • ALLOW_UNASSIGNED

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

        public static final int USE_STD3_ASCII_RULES
        标志打开对STD-3 ASCII规则的检查
        另请参见:
        Constant Field Values
    • 方法详细信息

      • toASCII

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

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

        标签是域名的独立部分。 原始的ToASCII操作,如RFC 3490中定义的,仅在单个标签上运行。 该方法可以通过假设域名中的标签总是以点分隔来处理标签和整个域名。 以下字符被识别为点:\ u002E(全停),\ u3002(表意全部停止),\ uFF0E(全宽完全停止)和\ uFF61(半角表意全部停止)。 如果使用点作为标签分隔符,则该方法也会在输出翻译的字符串中将其全部更改为\ u002E(全停)。

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

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

        这种方便的方法就像通过调用双参数对应方法一样工作,如下所示:

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

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

        ToUnicode永远不会失败 在任何错误的情况下,输入字符串未修改。

        标签是域名的独立部分。 RFC 3490中定义的原始ToUnicode操作仅在单个标签上运行。 该方法可以通过假设域名中的标签总是以点分隔来处理标签和整个域名。 以下字符被识别为点:\ u002E(全停),\ u3002(表意全部停止),\ uFF0E(全宽完全停止)和\ uFF61(半角表意全部停止)。

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

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

        这种方便的方法就像通过调用双参数对应方法一样工作,如下所示:

        toUnicode(input, 0);
        参数
        input - 要处理的字符串
        结果
        翻译 String