2011-04-28 88 views
11

我試圖讓拉丁語的西里爾語單詞,所以我可以讓他們在網站上。我使用icu4j音譯器,但它仍然給這樣的奇怪的字符:Vil'ândimaa。它應該更像viljandimaa。當我複製該網址時,這些字母變成%..一些廢話。icu4j西里爾語拉丁語

有人知道如何用icu4j將西里爾語變成a-z嗎?

UPDATE

不能回答自己已經但是發現這個問題,這是非常有幫助的:Converting Symbols, Accent Letters to English Alphabet

回答

14

修改您的identifier做你想做的。您可以使用帶有Remove變換的正則表達式去除不需要的字符。例如,考慮字符串「'Eéматематитит #x043a;а」

"'E\u00E9 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430" 

標識符"Any-Latin; NFD; [^\\p{Alnum}] Remove"將音譯爲拉丁(其仍然可以包括重音),分解重音字符成信和變音符號和刪除任何不是字母數字。由此產生的字符串是「Eematematika」

您可以在ICU網站上的General Transforms下閱讀更多關於標識符的信息。


實施例:

//import com.ibm.icu.text.Transliterator; 
String greek 
     = "'E\u00E9 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430"; 
String id = "Any-Latin; NFD; [^\\p{Alnum}] Remove"; 
String latin = Transliterator.getInstance(id) 
          .transform(greek); 
System.out.println(latin); 

測試針對ICU4J 49.1。

+0

謝謝麥克道威爾 - 你能舉一個非常快速的例子嗎? – 2012-04-05 07:46:29

+0

@Nicholas Tolley Cottrell - 示例添加。 – McDowell 2012-04-07 18:36:23

+0

再次感謝McDowell - 我最終使用「Any-Latin; NFD」,因爲我想保留空格。 – 2012-04-17 09:40:37

0

沒有關於ICU4J的想法,但in the Unicode table Cyrillic takes只有一個很小的範圍內。我並沒有將工作模式不清楚的第三方庫,而是爲每個西裏爾字母定義一個音譯序列,並自己進行翻譯。

P.S.什麼語言的詞「viljandimaa」來自?聽起來不像西里爾...

+0

感謝您的回答。它的愛沙尼亞地點是俄羅斯。 – ivar 2011-04-28 13:46:06

相關問題