我試圖讓拉丁語的西里爾語單詞,所以我可以讓他們在網站上。我使用icu4j音譯器,但它仍然給這樣的奇怪的字符:Vil'ândimaa。它應該更像viljandimaa。當我複製該網址時,這些字母變成%..一些廢話。icu4j西里爾語拉丁語
有人知道如何用icu4j將西里爾語變成a-z嗎?
UPDATE
不能回答自己已經但是發現這個問題,這是非常有幫助的:Converting Symbols, Accent Letters to English Alphabet
我試圖讓拉丁語的西里爾語單詞,所以我可以讓他們在網站上。我使用icu4j音譯器,但它仍然給這樣的奇怪的字符:Vil'ândimaa。它應該更像viljandimaa。當我複製該網址時,這些字母變成%..一些廢話。icu4j西里爾語拉丁語
有人知道如何用icu4j將西里爾語變成a-z嗎?
UPDATE
不能回答自己已經但是發現這個問題,這是非常有幫助的:Converting Symbols, Accent Letters to English Alphabet
修改您的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。
沒有關於ICU4J的想法,但in the Unicode table Cyrillic takes只有一個很小的範圍內。我並沒有將工作模式不清楚的第三方庫,而是爲每個西裏爾字母定義一個音譯序列,並自己進行翻譯。
P.S.什麼語言的詞「viljandimaa」來自?聽起來不像西里爾...
感謝您的回答。它的愛沙尼亞地點是俄羅斯。 – ivar 2011-04-28 13:46:06
謝謝麥克道威爾 - 你能舉一個非常快速的例子嗎? – 2012-04-05 07:46:29
@Nicholas Tolley Cottrell - 示例添加。 – McDowell 2012-04-07 18:36:23
再次感謝McDowell - 我最終使用「Any-Latin; NFD」,因爲我想保留空格。 – 2012-04-17 09:40:37