#unicode #normalization #diacritics #unicode-normalization
#юникод #нормализация #диакритические знаки #юникод-нормализация
Вопрос:
Я хотел бы иметь возможность сказать «Нормализовать эту строку, введя диакритические ударения в их комбинирующую форму».
Подробности:
Мой код разрабатывается на C #, но я не считаю, что проблема зависит от языка.
С моими данными есть две проблемы (1) диакритический знак предшествует базовому символу в этих данных (он должен следовать за базовым символом в формах D или KD в Юникоде). (2) диакритический знак ударения в моих данных — это греческий Tonos (U 0384), но для нормализации он должен сочетать форму (U 0301).
Я хотел бы сделать это программно. Я бы подумал, что этот тип операции должен быть хорошо известен, но я не нашел поддержки в методах глобализации C # (Существуют методы нормализации, но нет способа принудительно перевести диакритические ударения в их комбинирующую форму).
Ответ №1:
Я не думаю, что методы глобализации C # могут вам здесь помочь. Проблема, как вы указали, заключается в том, что U 0384 не является комбинирующим символом. Это символ сам по себе. Это также видно из декомпозиции совместимости (до U 0020 U 0301). Набор данных, скорее всего, получен из источника, который отображал бы tonos в виде диакритического знака на следующем символе. Это не «правильно» в соответствии со спецификацией unicode. Таким образом, вам придется конвертировать данные самостоятельно. Я столкнулся с аналогичной проблемой с апострофом; иногда приложения используют правильные кавычки.
Преобразование данных не сложно, я уверен, вы сможете это запрограммировать. У меня был бы конвертер с отслеживанием состояния и потоковой передачей данных. При обнаружении U 0384 оно не отображается. Вы придерживаетесь состояния «tonos» и выдаете U 0301 после СЛЕДУЮЩЕГО символа. Необходимо обработать условия ошибки (выполняется U 0384, конец данных в состоянии «tonos»). Эти данные можно нормализовать с помощью обычных API. Удачи.