1

将规则"NFD; [:Nonspacing Mark:] Remove; NFC"输入ICU Transliterator demo,字符Ø( \u00d8== LATIN CAPITAL LETTER O WITH STROKE) 保持原样(即 STROKE 未被剥离)。

在非标记空间列表(Category Mn) 中,我找不到任何COMBINING DIAGONAL STROKE类似于COMBINING SHORT STROKE OVERLAY( \u0335) 或COMBINING LONG STROKE OVERLAY( \u0336) 的名称。

但是,我确实找到了COMBINING SHORT SOLIDUS OVERLAY( \u0337) 和COMBINING LONG SOLIDUS OVERLAY( \u0338)。o它们看起来很相似,但在我的浏览器中与和结合使用时会呈现出更粗的线条O

我访问的Unicode 数据\u00d8不提供该字符的分解。

同时,ICU Collat​​or Demo将使用 Primary (Level = 1 = Base Letter) Collat​​or 将 、 、 、 和 中的每一个整理到ø相同oØ代码点Oo\u0337O\u0338

这是否意味着 Demo 中使用的 Collat​​or 的语言环境已设置为以 Unicode 规范没有提及的方式识别基本字符?

如果是这样,如果我想从LATIN [CAPITAL, SMALL] LETTER *音译字符中删除笔划,是否需要自定义基于规则的音译器?

4

3 回答 3

2

请参阅以下内容。拉丁语 ASCII 直译器进入 ICU 4.6。正如您所指出的,整理演示使用 UCA / CLDR 剪裁,其中 O 与斜线 O 作为基本字母差异,这与是否存在分解不是同一个问题。“w”也不会分解成“v + v”。分解与是否存在以两种不同方式表示字符的现有编码有关。

于 2011-07-29T00:09:02.803 回答
1

是的。由于某种原因,这封信Ø没有分解,因此您必须手动处理它。

于 2011-07-28T16:47:48.780 回答
0

这种变换replaceAll甚至适用于删除 Ø 和其他字符。

String id = "Accents-Any;NFD;[:Nonspacing Mark:] Remove; NFC";
System.out.println(latin.replaceAll("[^\\w]",""));
于 2014-03-06T16:30:32.370 回答