Итерация по кодовым точкам Unicode символ за символом - PullRequest
7 голосов
/ 27 ноября 2011

У меня есть серия кодов Unicode.Что мне действительно нужно сделать, так это перебирать эти кодовые точки в виде последовательности символов, , а не в виде последовательности кодовых точек, и определять свойства каждого отдельного символа, например, буквы, независимо от того.

Например, представьте, что я писал текстовое поле с поддержкой Unicode, и пользователь вводил символ Unicode, который имел более одной кодовой точки, например, «e with diacritic».Я знаю, что этот конкретный символ также может быть представлен как одна кодовая точка и может быть нормализован к этой форме, но я не думаю, что это возможно в общем случае.Как я мог реализовать Backspace?Очевидно, он не может просто стереть последнюю кодовую точку, потому что они могли просто ввести более одной кодовой точки.

Как я могу перебрать кучу кодовых точек Unicode в виде символов ?

Редактировать: Итераторы разрыва, предлагаемые ICU, выглядят почти так, как мне нужно.Тем не менее, я не использую ICU, поэтому любые ссылки на то, как реализовать мои собственные эквивалентные функции, будут приемлемым ответом.

Другое редактирование: Оказывается, что Windows API действительно предлагает эту функцию.MSDN просто не очень хорош в размещении всех строковых функций в одном месте. CharNext - это функция, которую я ищу.

Ответы [ 2 ]

4 голосов
/ 27 ноября 2011

Используйте библиотеку ICU.

http://site.icu -project.org /

например:

http://icu -project.org / apiref / icu4c / classUnicodeString.html # ae3ffb6e15396dff152cb459ce4008f90

- это функция, которая возвращает символ с определенным смещением символа в строке.

1 голос
/ 27 ноября 2011

В проекте UTF8-CPP имеется множество чистых, простых для чтения, STL-подобных алгоритмов для перебора строк кода Unicode по коду, по коду, по символу и т. Д..

Обратите внимание, что подход «символ за символом» может быть неочевидным.Один простой способ сделать это - перебрать строку UTF-32 в форме нормализации C, которая гарантирует кодирование с фиксированной длиной.

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