Icu4j кириллица на латинский

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

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

UPDATE

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

Ответ 1

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

For example, consider the string "'Eé математика":

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

Идентификатор "Any-Latin; NFD; [^\\p{Alnum}] Remove" будет транслитерировать на латинский язык (который может содержать акценты), разделить акцентированные символы на букву и диакритику и удалить все, что не является буквенно-цифровым. Полученная строка - "Eematematika".

Подробнее о идентификаторах в General Transforms можно узнать на веб-сайте 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

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

P.S. Из какого языкового слова "вильяндимаа"? Для меня это не похоже на кириллицу...