icu4j с кириллицы на латинский - PullRequest
11 голосов
/ 28 апреля 2011

Я пытаюсь, чтобы кириллические слова были в латинице, чтобы они могли быть в URL. Я использую транслитератор icu4j , но он по-прежнему выдает странные символы, подобные этому: Vilʹândimaa . Это должно быть больше похоже на viljandimaa . Когда я копирую этот URL, эти буквы превращаются в% .. что-то бесполезное.

Кто-нибудь знает, как получить кириллицу в a-z с помощью icu4j?

UPDATE

Не могу ответить сам, но нашел этот вопрос очень полезным: Преобразование символов, букв ударения в английский алфавит

Ответы [ 3 ]

15 голосов
/ 28 апреля 2011

Измените свой идентификатор , чтобы сделать то, что вы хотите. Вы можете удалить ненужные символы с помощью регулярного выражения с преобразованием Remove.

Например, рассмотрим строку "'E & # x00E9; & # x043c; & # x0430; & # x0442; & # x0435c; & # x043c; & # x0430; & # x0442; & # x0438; & # x043a; & # x0430; "

"'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.

0 голосов
/ 09 ноября 2018

Посмотрите на: 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);
0 голосов
/ 28 апреля 2011

Понятия не имею о icu4j, но в таблице Unicode кириллица принимает только небольшой диапазон. Вместо того, чтобы переходить на сторонние библиотеки с неясной работой, я бы определил последовательность транслитерации для каждого символа кириллицы и сделал перевод сам.

P.S. На каком языке происходит слово "viljandimaa"? Не похоже на кириллицу для меня ...

...