我正在努力让西里尔语成为拉丁文,所以我可以将它们放在网址中。我使用icu4j音译器,但它仍然会给出这样奇怪的字符:Vil'ândimaa。它应该更像是 viljandimaa 。当我复制那个网址时,这些字母会变成%..有些无用。
有人知道如何使用icu4j将西里尔语变成a-z吗?
更新
无法自己回答,但发现这个非常有用的问题:Converting Symbols, Accent Letters to English Alphabet
答案 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);