正则表达式引擎查看代码点,而不是代码单元.它别无选择,因为这是UTS#18 Level 1 Unicode支持的基本要求:
第1级:基本的Unicode支持.在此级别,正则表达式引擎提供对Unicode字符的支持作为基本逻辑单元.(这与Unicode的实际序列化无关,如UTF-8,UTF-16BE,UTF-16LE,UTF-32BE或UTF-32LE.)这是有用的Unicode支持的最低级别.它没有考虑最终用户对字符支持的期望,但确实满足了大多数低级程序员的要求.此级别的正则表达式匹配结果与国家或语言无关.在此级别,正则表达式引擎的用户需要编写更复杂的正则表达式来执行完整的Unicode处理.
无论是在普通的JDK正则表达式引擎中,还是在Android正则表达式引擎中,JNI进入ICU正则表达式库都可以获得比JDK提供的更好的Unicode支持.除此之外,ICU还满足所有Level-1要求以及一些Level-2要求,例如完整属性(即将推出的2.7),字形和更高的边界.你没有在JDK7之前达到1级,即使在那里它也缺少其余的.没有字形支持就很难使用Unicode,没有代码点支持也是如此.
有时你可以通过这些东西找到孤立的代理或反向代理,但这些不应该出现在有效交换的数据中.
通常,您希望尽可能远离任何代码单元接口,并且只使用那些支持代码点接口的API.代码单元是一个诅咒.
此外,远离Java预处理器.从那种方式来说,你的正则表达不会让你高兴.在ICU正则表达式引擎支持\x{???? ?????}和\N{????????},所以你应该使用这些.
无论如何,你为什么要和邪恶的代码单位纠缠在一起呢?它们违反了代码点抽象.
| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |