2011-04-28 56 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

相关问题