icu4j 西里尔文到拉丁文

2022-09-03 14:50:37

我试图让西里尔字母单词是拉丁语,这样我就可以把它们放在URL中。我使用icu4j音译器,但它仍然给出了像这样的奇怪字符:Vilʹândimaa。它应该更像viljandimaa。当我复制该网址时,这些字母会变成%..没用的东西。

有没有人知道如何用icu4j将西里尔字母变成a-z?

更新

不能回答我自己,但发现这个问题非常有帮助:将符号,重音字母转换为英语字母


答案 1

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

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

"'E\u00E9 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430"

标识符将音译为拉丁语(可能仍包含重音符号),将重音字符分解为字母和变音符号,并删除任何不是字母数字的内容。生成的字符串是“Eematematika”。"Any-Latin; NFD; [^\\p{Alnum}] Remove"

您可以在 ICU 网站上的“常规转换”下阅读有关标识符的更多信息。


例:

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


答案 2

看看: 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);

推荐