将规则"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 STROKE
(COMBINING 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会整理o
,O
,ø
,o
,Ø
和{{{} 1}}使用Primary(Level = 1 = Base Letter)Collator到相同的代码点。
这是否意味着Demo中使用的Collator的语言环境已经设置为以Unicode规范静默的方式识别基本字符?
如果是这样,如果我想在音译中从O
个字符中删除STROKE,我是否需要自定义基于规则的音译器?
答案 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]",""));