icu4j西里尔语到拉丁语

时间:2011-04-28 12:53:59

标签: java icu transliteration

我正在努力让西里尔语成为拉丁文,所以我可以将它们放在网址中。我使用icu4j音译器,但它仍然会给出这样奇怪的字符:Vil'ândimaa。它应该更像是 viljandimaa 。当我复制那个网址时,这些字母会变成%..有些无用。

有人知道如何使用icu4j将西里尔语变成a-z吗?

更新

无法自己回答,但发现这个非常有用的问题:Converting Symbols, Accent Letters to English Alphabet

3 个答案:

答案 0 :(得分:15)

修改identifier以执行您想要的操作。您可以使用带有Remove转换的正则表达式删除不需要的字符。

例如,考虑字符串“'Eéматематика”

"'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进行测试。

答案 1 :(得分:0)

不知道icu4j,但in the Unicode table Cyrillic takes只是一小部分。我没有转换到工作不清楚的第三方库,而是为每个西里尔符号定义音译序列并自己进行翻译。

P.S。什么语言单词“viljandimaa”来自哪里?对我来说听起来不像西里尔字母......

答案 2 :(得分:0)

看看: https://ru.stackoverflow.com/questions/633355/Показать-правильный-пример-транслитерации-на-java

添加保密性

<dependency>
    <groupId>com.ibm.icu</groupId>
    <artifactId>icu4j</artifactId>
    <version>63.1</version>
</dependency>

音译:

var CYRILLIC_TO_LATIN = "Latin-Russian/BGN"
// var CYRILLIC_TO_LATIN = "Russian-Latin/BGN"
Transliterator toLatinTrans = Transliterator.getInstance(CYRILLIC_TO_LATIN);
String result = toLatinTrans.transliterate(st);
System.out.println(result);