我正在尝试将西里尔字母的单词写成拉丁语,以便可以在url中使用它们。我使用了icu4j音译器,但它仍然会给出如下奇怪的字符: Vilʹândimaa 。它应该更像 viljandimaa 。当我复制该网址时,这些字母会变成%..没用的东西。
有人知道如何使用icu4j将西里尔字母变成a-z吗?
更新
现在还不能回答自己,但发现这个问题很有帮助:Converting Symbols, Accent Letters to English Alphabet
最佳答案
修改您的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。测试。