2011-07-28 107 views
1

飼餵規則"NFD; [:Nonspacing Mark:] Remove; NFC"ICU Transliterator demo,字符Ø\u00d8 == LATIN CAPITAL LETTER O WITH STROKE)保持原樣(即,行程未剝離)。音譯對的Unicode拉丁字母「與中風」

In the list of non-marking spaces(分類Mn),我找不到任何名爲COMBINING DIAGONAL STROKE類似的COMBINING SHORT STROKE OVERLAY\u0335)或COMBINING LONG STROKE OVERLAY\u0336)。

但是,我確實發現COMBINING SHORT SOLIDUS OVERLAY\u0337)和COMBINING LONG SOLIDUS OVERLAY\u0338)。它們看起來很相似,但在與oO結合使用時,我的瀏覽器中顯示的線條更粗。

Unicode data I accessed for \u00d8不提供該角色的分解。

與此同時,該ICU Collator Demo將各自的øoØOo\u0337O\u0338整理到使用主(等級= 1 =基本字母)分頁器相同的代碼點。

這是否意味着演示中使用的Collat​​or的語言環境已設置爲以Unicode規範保持沉默的方式標識基本字符?

如果是這樣,如果我想從LATIN [CAPITAL, SMALL] LETTER *字符的音譯中去掉STROKE,是否需要自定義基於規則的音譯器?

回答

2

請參閱以下內容。 Latin-ASCII音譯器進入ICU 4.6。正如你所指出的那樣,整理演示使用U/O裁減O作爲基本字母差異,這與O是否有分解是不一樣的問題。 「w」也不分解爲「v + v」。分解與是否存在以兩種不同方式表示字符的現有編碼有關。

+0

使用LATIN-ASCII轉換絕對比編寫我自己的Tranlsiterator規則更好!謝謝,史蒂文。 –

0

是的。出於某種原因,字母Ø沒有分解,因此您必須手動處理它。

+2

任何想法爲什麼不?好奇心在這一點...... –

0

這與replaceAll變換工作,甚至一起去除Ø和其他字符。

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