public final class IDN extends Object
国际化域名定义在RFC 3490中 。 RFC 3490定义了两个操作:ToASCII和ToUnicode。 这两个操作采用Nameprep算法,即Stringprep和Punycode算法来转换域名字符串的算法。
上述转换过程的行为可以通过各种标志进行调整:
安全考虑在国际化域名支持方面很重要。 例如,英文域名可能被重新分类 - 恶意拼写错误地替换非拉丁字母。 Unicode Technical Report #36讨论了IDN支持的安全问题以及可能的解决方案。 应用程序负责在使用国际域名时采取足够的安全措施。
Modifier and Type | Field and Description |
---|---|
static int |
ALLOW_UNASSIGNED
标志允许处理未分配的代码点
|
static int |
USE_STD3_ASCII_RULES
标志打开对STD-3 ASCII规则的检查
|
Modifier and Type | Method and Description |
---|---|
static String |
toASCII(String input)
从Unicode转换字符串为ASCII兼容性编码(ACE),通过的ToASCII操作中的定义
RFC 3490 。
|
static String |
toASCII(String input, int flag)
从Unicode转换字符串为ASCII兼容性编码(ACE),通过的ToASCII操作中的定义
RFC 3490 。
|
static String |
toUnicode(String input)
转换来自ASCII兼容性编码(ACE)为Unicode字符串,通过的ToUnicode操作中所定义的
RFC 3490 。
|
static String |
toUnicode(String input, int flag)
转换来自ASCII兼容性编码(ACE)为Unicode字符串,通过的ToUnicode操作中所定义的
RFC 3490 。
|
public static final int ALLOW_UNASSIGNED
public static final int USE_STD3_ASCII_RULES
public static String toASCII(String input, int flag)
ToASCII操作可能会失败。 如果任何一个步骤失败,ToASCII将失败。 如果ToASCII操作失败,将抛出IllegalArgumentException异常。 在这种情况下,输入字符串不应该在国际化的域名中使用。
标签是域名的独立部分。 原始的ToASCII操作,如RFC 3490中定义的,仅在单个标签上运行。 该方法可以通过假设域名中的标签总是以点分隔来处理标签和整个域名。 以下字符被识别为点:\ u002E(全停),\ u3002(表意全部停止),\ uFF0E(全宽完全停止)和\ uFF61(半角表意全部停止)。 如果使用点作为标签分隔符,则该方法也会在输出翻译的字符串中将其全部更改为\ u002E(全停)。
input
- 要处理的字符串
flag
- 进程标志;
可以是0或任何逻辑OR可能的标志
String
IllegalArgumentException
- 如果输入字符串不符合RFC 3490规范
public static String toASCII(String input)
这种方便的方法就像通过调用双参数对应方式一样工作,如下所示:
toASCII
(input, 0);
input
- 要处理的字符串
String
IllegalArgumentException
- 如果输入字符串不符合RFC 3490规范
public static String toUnicode(String input, int flag)
ToUnicode永远不会失败 在任何错误的情况下,输入字符串未修改。
标签是域名的独立部分。 RFC 3490中定义的原始ToUnicode操作仅在单个标签上运行。 该方法可以通过假设域名中的标签总是以点分隔来处理标签和整个域名。 以下字符被识别为点:\ u002E(全停),\ u3002(表意全部停止),\ uFF0E(全宽完全停止)和\ uFF61(半角表意全部停止)。
input
- 要处理的字符串
flag
- 进程标志
可以是0或任何逻辑OR可能的标志
String