- java.lang.Object
-
- java.net.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 1122和RFC 1123检查ASCII字符串。 如果他们不符合要求,则会出错。
在国际化域名支持方面,安全考虑很重要。 例如,英文域名可能是同形词 - 通过替换非拉丁字母而恶意拼写错误。 Unicode Technical Report #36讨论了IDN支持的安全问题以及可能的解决方案。 在使用国际域名时,应用程序负责采取适当的安全措施。
- 从以下版本开始:
- 1.6
-
-
字段汇总
字段 变量和类型 字段 描述 static int
ALLOW_UNASSIGNED
标记以允许处理未分配的代码点static int
USE_STD3_ASCII_RULES
标记以打开STD-3 ASCII规则的检查
-
方法摘要
所有方法 静态方法 具体的方法 变量和类型 方法 描述 static String
toASCII(String input)
将字符串从Unicode转换为ASCII兼容编码(ACE),如RFC 3490的ToASCII操作所 定义 。static String
toASCII(String input, int flag)
从Unicode转换字符串为ASCII兼容性编码(ACE),通过的ToASCII操作中的定义 RFC 3490 。static String
toUnicode(String input)
static String
toUnicode(String input, int flag)
-
-
-
方法详细信息
-
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
-
-