在 Java 中匹配泰语脚本字符

发布于 2024-10-25 01:41:17 字数 209 浏览 6 评论 0原文

在过去的两个小时里,我与数据库中的泰语脚本字符串度过了很​​多性感的时光。它们整理得很神秘,输出时会变异,没有自然秩序,是一场灾难。

我想忽略任何带有泰语脚本字符的字符串,但我不知道如何:

Pattern.compile("\\p{Thai}") 在初始化时失败。 “[ก-๛]” - 这会起作用吗?正确的方法是什么?

Over last two hours I have a lot of sexy time with Thai Script strings that slipped in my database. They collate mysteriously, mutate when output, do not have natural order and are a disaster.

I want to just ignore any strings with Thai Script characters, but I have no idea how:

Pattern.compile("\\p{Thai}") fails on init. "[ก-๛]" - would that ever work? What's the correct way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情定在深秋 2024-11-01 01:41:17

Thai 是一个 Unicode 块,Unicode 块应指定为 \p{In...}

Pattern.compile("\\p{InThai}") 

Thai is a Unicode block, and Unicode blocks should be specified as \p{In...}:

Pattern.compile("\\p{InThai}") 
蓝戈者 2024-11-01 01:41:17

当您指的是 Unicode 脚本时,不应使用 Unicode 块。例如,฿(Unicode 中的代码点 U+0E3F THAI CURRENCY SYMBOL BAHT)是一个 \p{Block=Thai} ᴀᴋᴀ \p{InThai} 字符,但它不是 \p{Script=Thai} ᴀᴋᴀ \p{IsThai} 字符。它是 \p{Script=Common} 集的货币符号。

对于像希腊语这样的大集合尤其如此。希腊语块中有 18 个代码点不在希腊字母中,希腊字母中有 250 个代码点不在希腊块中。

幸运的是,您不必担心泰语的情况,因为从 Unicode 6.0 开始,只有 U+0E3F 是异常值。您对此感到双重幸运,因为标准 Java 不支持 Java 7 之前的 Unicode 脚本;奇怪但真实。对于早于 JDK7 的版本中的 Unicode 脚本支持,您必须使用 JNI 来获取 ICU 正则表达式库,就像 Google 对 Android 上的 Java 所做的那样。不过,他们的方法有很多好处,因此即使它是 JNI,也可能值得考虑。

You shouldn’t use Unicode blocks when you mean Unicode scripts. For example, a ฿, which is code point U+0E3F THAI CURRENCY SYMBOL BAHT in Unicode, is a \p{Block=Thai} ᴀᴋᴀ \p{InThai} character, but it is not a \p{Script=Thai} ᴀᴋᴀ \p{IsThai} character. It’s a currency symbol of the \p{Script=Common} set.

This is especially true for large sets like Greek. There are 18 code points in the Greek block that are not in the Greek script, and there are 250 code points in the Greek script that are not in the Greek block.

Fortunately, you don't have to worry about those here with Thai, since as of Unicode 6.0, only U+0E3F alone is an outlier here. You’re doubly fortunate in this, because standard Java doesn’t support Unicode scripts prior to Java 7; bizarre but true. For Unicode script support in releases earlier than JDK7, you have to use JNI to get at the ICU regex library, just like Google does for Java on Android. There are a lot of benefits to their appoach, though, so even though it’s JNI it may be worth considering.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文