我正在尝试将西里尔字母的单词写成拉丁语,以便可以在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。测试。

10-07 21:00