逐个字符地迭代Unicode代码点

Pup*_*ppy 7 c++ unicode character-properties

我有一系列Unicode代码点.我真正需要做的是将这些代码点迭代为一系列字符,而不是一系列代码点,并确定每个字符的属性,例如是一个字母,无论如何.

例如,假设我正在编写一个支持Unicode的文本框,并且用户输入的Unicode字符不止一个代码点 - 例如,"e with diacritic".我知道这个特定字符也可以表示为一个代码点,并且可以归一化为该形式,但我不认为在一般情况下这是可能的.我怎么能实现退格?它显然不能只删除最后一个代码点,因为它们可能刚刚输入了多个代码点.

如何将一堆Unicode代码点作为字符进行迭代?

编辑:ICU提供的Break Iterators似乎是我所需要的.但是,我没有使用ICU,因此任何关于如何实现我自己的等效功能的参考都将是一个公认的答案.

另一个编辑:事实证明,Windows API确实提供了这种功能.MSDN将所有字符串函数放在一个地方并不是很好.CharNext是我正在寻找的功能.

bma*_*ies 5

使用 ICU 图书馆。

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

例如:

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

是返回字符串中特定字符偏移处的字符的函数。

  • @bmargulies:即使在 UTF-32 中,代码点也不是字符。UTF-32 解决了代理对问题,但还存在其他问题,例如变音符号。查看[Unicode 文本分段附件](http://unicode.org/reports/tr29/) 中的字素簇。 (2认同)