我试图让拉丁语的西里尔语单词,所以我可以让他们在网站上。我使用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