国际化域名在 RFC 3490 中定义。 RFC 3490 定义了两种操作:ToASCII 和 ToUnicode。这2个操作使用了名称准备算法,它是字符串准备的profile,和Punycode算法来来回转换域名字符串。
上述转换过程的行为可以通过各种标志进行调整:
- 如果使用 ALLOW_UNASSIGNED 标志,则要转换的域名字符串可以包含 Unicode 3.2 中未分配的代码点,这是 IDN 转换所基于的 Unicode 版本。如果未使用该标志,则此类未分配代码点的存在将被视为错误。
- 如果使用了 USE_STD3_ASCII_RULES 标志,则会根据 RFC 1122 和 RFC 1123 检查 ASCII 字符串。如果他们不符合要求,这是一个错误。
安全考虑对于国际化域名支持很重要。例如,英文域名可能是同形异义通过替换非拉丁字母恶意拼写错误。 Unicode 技术报告 #36 讨论了 IDN 支持的安全问题以及可能的解决方案。应用程序有责任在使用国际域名时采取足够的安全措施。
- 自从:
- 1.6
-
字段摘要
字段修饰符和类型Field描述static final int允许处理未分配代码点的标志static final int标记以打开针对 STD-3 ASCII 规则的检查 -
方法总结
修饰符和类型方法描述static String将字符串从 Unicode 转换为 ASCII 兼容编码 (ACE),如 RFC 3490 的 ToASCII 操作所定义。static String将字符串从 Unicode 转换为 ASCII 兼容编码 (ACE),如 RFC 3490 的 ToASCII 操作所定义。static String将字符串从 ASCII 兼容编码 (ACE) 转换为 Unicode,如 RFC 3490 的 ToUnicode 操作所定义。static String将字符串从 ASCII 兼容编码 (ACE) 转换为 Unicode,如 RFC 3490 的 ToUnicode 操作所定义。
-
字段详细信息
-
ALLOW_UNASSIGNED
public static final int ALLOW_UNASSIGNED允许处理未分配代码点的标志- 参见:
-
USE_STD3_ASCII_RULES
public static final int USE_STD3_ASCII_RULES标记以打开针对 STD-3 ASCII 规则的检查- 参见:
-
-
方法详情
-
toASCII
将字符串从 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
将字符串从 Unicode 转换为 ASCII 兼容编码 (ACE),如 RFC 3490 的 ToASCII 操作所定义。这个便捷方法的工作方式就像调用两个参数的对应方法一样,如下所示:
toASCII(输入,0);- 参数:
input- 要处理的字符串- 返回:
-
翻译的
String - 抛出:
IllegalArgumentException- 如果输入字符串不符合 RFC 3490 规范
-
toUnicode
将字符串从 ASCII 兼容编码 (ACE) 转换为 Unicode,如 RFC 3490 的 ToUnicode 操作所定义。ToUnicode 永远不会失败。如果出现任何错误,输入字符串将原封不动地返回。
标签是域名的独立部分。如 RFC 3490 中所定义,原始的 ToUnicode 操作仅对单个标签进行操作。此方法可以处理标签和整个域名,假设域名中的标签始终由点分隔。以下字符被识别为点:\u002E(句号)、\u3002(表意句号)、\uFF0E(全角句号)和 \uFF61(半角表意句号)。
- 参数:
input- 要处理的字符串flag- 进程标志;可以是 0 或可能标志的任何逻辑或- 返回:
-
翻译的
String
-
toUnicode
将字符串从 ASCII 兼容编码 (ACE) 转换为 Unicode,如 RFC 3490 的 ToUnicode 操作所定义。这个便捷方法的工作方式就像调用两个参数的对应方法一样,如下所示:
toUnicode(输入,0);- 参数:
input- 要处理的字符串- 返回:
-
翻译的
String
-