Итерация по кодовым точкам Unicode символ за символом

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

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

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

Edit: Break Iterators, предлагаемые ICU, похоже, в значительной степени соответствуют тому, что мне нужно. Однако, я не использую ICU, поэтому любые ссылки на то, как реализовать мою собственную эквивалентную функциональность, будут приняты как ответ.

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

7
задан tchrist 29 March 2012 в 18:17
поделиться