Транслитерация на УНИКОД ЛАТИНСКИХ ПИСЬМАХ "С ХОДОМ" - PullRequest
1 голос
/ 28 июля 2011

Подавая правило "NFD; [:Nonspacing Mark:] Remove; NFC" в демонстрационную версию ICU Transliterator , символ Ø (\u00d8 == LATIN CAPITAL LETTER O WITH 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, не обеспечивают декомпозициидля этого символа.

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

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

Если это так, нужен ли мне собственный транслитератор на основе правил, если я хочу убрать STROKE из LATIN [CAPITAL, SMALL] LETTER * символов при транслитерации?

Ответы [ 3 ]

2 голосов
/ 29 июля 2011

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

1 голос
/ 28 июля 2011

Да. По какой-то причине буква Ø не имеет декомпозиции, поэтому вам придется обрабатывать ее вручную.

0 голосов
/ 06 марта 2014

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

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