Транслитерация в Unicode ЛАТИНСКИЕ БУКВЫ СО ШТРИХОМ

При добавлении правила "NFD; [:Nonspacing Mark:] Remove; NFC" в демонстрацию ICU Transliterator символ Ø (\u00d8 == LATIN CAPITAL LETTER O WITH STROKE) остается как есть (т. е. STROKE не удаляется).

В списке немаркирующих пробелов (категория Mn), Я не могу найти ничего с именем COMBINING DIAGONAL STROKE, похожего на COMBINING SHORT STROKE OVERLAY (\u0335) или COMBINING LONG STROKE OVERLAY (\u0336).

Однако я нахожу COMBINING SHORT SOLIDUS OVERLAY (\u0337) и COMBINING LONG SOLIDUS OVERLAY (\u0338). Они кажутся похожими, но в моем браузере отображают гораздо более толстые линии в сочетании с o и O.

данные Unicode, к которым я обращался для \u00d8, не дают декомпозиции для этот персонаж.

В то же время демонстрация ICU Collator сопоставит каждый из ø, o, Ø, O, o\u0337 и O\u0338 с одной и той же кодовой точкой, используя первичный (уровень = 1 = базовая буква) сортировщик.

Означает ли это, что локаль Collator, используемая в демонстрации, была настроена на идентификацию базового символа таким образом, что спецификация Unicode умалчивает?

Если да, то нужен ли мне пользовательский транслитератор на основе правил, если я хочу убрать ШТРОК из LATIN [CAPITAL, SMALL] LETTER * символов при транслитерации?


person Jacob Zwiers    schedule 28.07.2011    source источник


Ответы (3)


См. следующее. Транслитератор Latin-ASCII вошел в ICU 4.6. Как вы заметили, в демо-версии сопоставления используются настройки UCA / CLDR, в которых O по сравнению с косой чертой-O в качестве различий в базовых буквах, это не тот же вопрос, что и наличие декомпозиции. «w» также не распадается на «v + v». Разложения связаны с тем, существовали ли кодировки, которые представляют символы двумя разными способами.

person Steven R. Loomis    schedule 29.07.2011
comment
Использование преобразования LATIN-ASCII определенно лучше, чем написание собственных правил Tranlsiterator! Спасибо, Стивен. - person Jacob Zwiers; 04.08.2011

да. Буква Ø почему-то не имеет разложения, поэтому приходится обрабатывать вручную.

person dan04    schedule 28.07.2011

Это преобразование вместе с replaceAll работает даже для удаления Ø и других символов.

String id = "Accents-Any;NFD;[:Nonspacing Mark:] Remove; NFC";
System.out.println(latin.replaceAll("[^\\w]",""));
person user3389160    schedule 06.03.2014