Как нормализовать CodePage для Unicode Form C, когда диакритический знак предшествует и акцент не объединяет форму - PullRequest
0 голосов
/ 12 августа 2010

Я бы хотел сказать: «Нормализовать эту строку, вставив диакритические акценты в их комбинированную форму».

Подробности:
Мой код разрабатывается на C #, но я не верювопрос, чтобы быть конкретным языком.

Есть две проблемы с моими данными (1) диакритический знак предшествует базовому символу в этих данных (он должен следовать за базовым символом в формах Unicode D или KD).(2) диакритический знак акцента в моих данных - греческий тонос (U + 0384), но для его нормализации необходимо комбинировать форму (U + 0301).

Я хотел бы сделать это программно.Я бы подумал, что этот тип операции должен быть хорошо известен, но я не нашел поддержки в методах глобализации C # (есть способы нормализации, но нет способа заставить диакритические акценты в их объединяющей форме).

1 Ответ

1 голос
/ 23 августа 2010

Я не думаю, что методы глобализации C # могут вам здесь помочь. Проблема, как вы указали, заключается в том, что U + 0384 не является комбинирующим символом. Это персонаж сам по себе. Это также видно из разложения совместимости (К U + 0020 U + 0301). Скорее всего, набор данных исходит из источника, который будет отображать тоны в виде диакритического знака на следующем символе. Это не "правильно" в соответствии со спецификацией Unicode. Таким образом, вам придется конвертировать данные самостоятельно. Я столкнулся с подобной проблемой с апострофом; иногда приложения используют правильную кавычку.

Преобразование данных не сложно, я уверен, что вы можете закодировать это. Я хотел бы иметь конвертер с отслеживанием состояния и передавать данные через него. Когда U + 0384 обнаруживается, он не заполняется. Вы придерживаетесь состояния "tonos" и выбрасываете U + 0301 после СЛЕДУЮЩЕГО символа. Условия ошибки, которые должны быть обработаны (U + 0384 работает, конец данных в состоянии "tonos"). Эти данные можно нормализовать с помощью обычных API. Удачи.

...