icu4j 西里尔文到拉丁文
2022-09-03 14:50:37
我试图让西里尔字母单词是拉丁语,这样我就可以把它们放在URL中。我使用icu4j音译器,但它仍然给出了像这样的奇怪字符:Vilʹândimaa。它应该更像viljandimaa。当我复制该网址时,这些字母会变成%..没用的东西。
有没有人知道如何用icu4j将西里尔字母变成a-z?
更新
不能回答我自己,但发现这个问题非常有帮助:将符号,重音字母转换为英语字母
我试图让西里尔字母单词是拉丁语,这样我就可以把它们放在URL中。我使用icu4j音译器,但它仍然给出了像这样的奇怪字符:Vilʹândimaa。它应该更像viljandimaa。当我复制该网址时,这些字母会变成%..没用的东西。
有没有人知道如何用icu4j将西里尔字母变成a-z?
更新
不能回答我自己,但发现这个问题非常有帮助:将符号,重音字母转换为英语字母
修改标识符以执行所需操作。您可以使用带有转换的正则表达式去除不需要的字符。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 进行测试。
看看: 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);