15

我正在尝试让西里尔字母变成拉丁语,这样我就可以在网址中使用它们。我使用icu4j音译,但它仍然会给出如下奇怪的字符:Vilʹândimaa。它应该更像viljandimaa。当我复制那个网址时,这些字母变成了 %.. 一些无用的东西。

有人知道如何使用 icu4j 将西里尔文转换为 az 吗?

更新

无法回答自己,但发现这个问题非常有帮助:Converting Symbols, Accent Letters to English Alphabet

4

3 回答 3

16

修改您的标识符以执行您想要的操作。您可以使用带有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 进行测试。

于 2011-04-28T13:52:31.507 回答
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);
于 2018-11-09T13:19:21.303 回答
-1

不知道 icu4j,但在 Unicode 表中,西里尔文只占很小的范围。我不会向工作不明确的第三方库转发,而是为每个西里尔符号定义音译序列并自己进行翻译。

PS“viljandimaa”来自什么语言?对我来说听起来不像西里尔文......

于 2011-04-28T13:30:37.110 回答