问题 icu4j西里尔语到拉丁语


我正试图让西里尔语成为拉丁文,所以我可以把它们放在网址中。我用 ICU4J 音译器,但它仍然会给出这样奇怪的字符: Vil'ândimaa。它应该更像 维良。当我复制那个网址时,这些字母会变成%..某些东西没用。

有谁知道怎么用icu4j把西里尔语变成a-z?

UPDATE

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


5473
2018-04-28 12:53


起源



答案:


修改你的 识别码 做你想做的事。您可以使用带有的正则表达式删除不需要的字符 Remove 转变。

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

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

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

您可以阅读有关标识符的更多信息 一般变革 在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进行测试。


15
2018-04-28 13:52



谢谢McDowell - 你能给出一个非常快速的例子吗? - Nic Cottrell
@Nicholas Tolley Cottrell - 示例补充。 - McDowell
再次感谢McDowell - 我最终使用了“Any-Latin; NFD”,因为我想保留空间。 - Nic Cottrell
@NicholasTolleyCottrell - 这将使变音符号完整(拉丁字母的重音符号。)NFD变换的要点是将重音和字母分成两个连续的代码点。如果要保留空格,请修改中的正则表达式 Remove 转型。 - McDowell
另一个,也许是更清洁,可以使用 Any-Latin; Lower; Latin-ASCII 而不是手动过滤的NFD - 尽可能明确地转换为ASCII。 - Václav Slavík


答案:


修改你的 识别码 做你想做的事。您可以使用带有的正则表达式删除不需要的字符 Remove 转变。

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

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

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

您可以阅读有关标识符的更多信息 一般变革 在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进行测试。


15
2018-04-28 13:52



谢谢McDowell - 你能给出一个非常快速的例子吗? - Nic Cottrell
@Nicholas Tolley Cottrell - 示例补充。 - McDowell
再次感谢McDowell - 我最终使用了“Any-Latin; NFD”,因为我想保留空间。 - Nic Cottrell
@NicholasTolleyCottrell - 这将使变音符号完整(拉丁字母的重音符号。)NFD变换的要点是将重音和字母分成两个连续的代码点。如果要保留空格,请修改中的正则表达式 Remove 转型。 - McDowell
另一个,也许是更清洁,可以使用 Any-Latin; Lower; Latin-ASCII 而不是手动过滤的NFD - 尽可能明确地转换为ASCII。 - Václav Slavík


不知道icu4j,但是 在Cyrillic的Unicode表中 只是一小部分。我没有转换到工作不清楚的第三方库,而是为每个西里尔符号定义音译序列并自己进行翻译。

附:什么语言“viljandimaa”来自哪里?对我来说听起来不像西里尔字母......


0
2018-04-28 13:30



谢谢回答。它的爱沙尼亚地点是俄罗斯。 - ivar