Unicode LATIN LETTERS“with STROKE”的音译

时间:2011-07-28 16:25:16

标签: unicode icu transliteration

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

In the list of non-marking spaces(类别Mn),我找不到类似于COMBINING DIAGONAL STROKECOMBINING SHORT STROKE OVERLAY)或\u0335的{​​{1}} {(1}} { {1}})。

但是,我找到了COMBINING LONG STROKE OVERLAY\u0336)和COMBINING SHORT SOLIDUS OVERLAY\u0337)。它们看似相似,但在与COMBINING LONG SOLIDUS OVERLAY\u0338结合使用时,会在浏览器中呈现更粗的线条。

Unicode data I accessed for \u00d8不会为该字符提供分解。

与此同时,ICU Collator Demo会整理oOøoØ和{{{} 1}}使用Primary(Level = 1 = Base Letter)Collat​​or到相同的代码点。

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

如果是这样,如果我想在音译中从O个字符中删除STROKE,我是否需要自定义基于规则的音译器?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

是。出于某种原因,字母Ø没有分解,因此您必须手动处理它。

答案 2 :(得分:0)

此变换与replaceAll一起用于删除Ø和其他字符。

String id = "Accents-Any;NFD;[:Nonspacing Mark:] Remove; NFC";
System.out.println(latin.replaceAll("[^\\w]",""));