Струнный класс на основе графем? - PullRequest
1 голос
/ 20 октября 2010

Мне интересно, почему у нас нет некоторых строковых классов, которые представляют собой строку графических кластеров Unicode вместо кодовых точек или символов. Мне кажется, что в большинстве приложений программистам было бы легче получить доступ к компонентам графемы, когда это необходимо, чем организовывать их из кодовых точек, что представляется необходимым, даже если только избежать случайного разбиения строки в «средней графеме» (по крайней мере, в теории). Внутренне строковый класс может использовать кодировку переменной длины, такую ​​как UTF-8, UTF-16, или в этом контексте даже UTF-32 имеет переменную длину; или реализовать подклассы для всех из них (и при желании настроить выбор во время выполнения, чтобы разные языки могли использовать свои оптимальные кодировки). Но если бы программисты могли «видеть» графемные блоки при проверке строки, разве код обработки строк в целом не был бы ближе к достижению правильности и без особой дополнительной сложности?

Ссылки:
Знаки и комбинированные знаки
Руководство по внедрению Unicode, часть 4: разрушение графемы
Ссылка на класс UnicodeString
Перечисление строки по графеме вместо символа
Строки и кодировка символов в C ++

1 Ответ

0 голосов
/ 25 октября 2010

Я так не думаю, потому что разрывы графемы не единственная мера правильности.И есть разные воспринимаемые пользователем символы в зависимости от используемого языка / сценария.Если вас беспокоит режим нормализации, вы также захотите увидеть Normalizer :: concatenate .Поэтому я бы порекомендовал просто работать в единицах кода большую часть времени и вычислять разрывы, когда это необходимо.

...