Как перечислить все канонически эквивалентные последовательности Unicode в Perl? - PullRequest
9 голосов
/ 21 июня 2011

Существует ли стандартный Perl-модуль или функция, которая, учитывая Unicode Комбинирующую последовательность символов (или, в более общем случае, произвольную текстовую строку Unicode), будет генерировать список всех канонически эквивалентных строк?

Например, если задан символ U + 1EAD, я хотел бы получить список всех этих канонически эквивалентных последовательностей:

0061 0302 0323
0061 0323 0302
00E2 0323
1EA1 0302
1EAD

(Меня не особенно волнует,Интерфейс в терминах массивов USV или UTF-строк.)

1 Ответ

2 голосов
/ 21 июня 2011

Это проблема XY? Если вы хотите сравнить / сопоставить 2 строки юникода и беспокоитесь о том, что различные способы кодирования акцентированных символов могут создать ложные отрицания, то лучший способ сделать это - нормализовать 2 строки, используя одну из функций нормализации из Unicode :: Нормализовать, прежде чем делать сравнение или сопоставление.

В противном случае становится немного грязно.

Вы могли бы получить полное имя персонажа, используя charnames::viacode(0x1EAD); (для U + 1EAD это было бы МАЛЕНЬКОЕ ПИСЬМО А С CIRCUMFLEX И DOT НИЖЕ ), и получить различные сочинения разделив имя на WITH | AND. Затем вы можете сгенерировать все комбинации (проверяя, что они существуют!) Из базового символа + модификаторы и другие модификаторы. На этом этапе вы столкнетесь с проблемой сопоставления имен объединяющих символов в полном имени (например, CIRCUMFLEX ) с действительным именем объединяющего символа ( ACCENT ACCENT . Наверное, есть правила для этого, но я их не знаю.

Это была бы моя наивная попытка, возможно, есть лучшие способы сделать это, но, поскольку до сих пор никто не предлагал информацию ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...