逐个字符地迭代Unicode代码点

时间:2011-11-26 22:05:15

标签: c++ unicode character-properties

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

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

如何将一堆Unicode代码点迭代为字符

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

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

2 个答案:

答案 0 :(得分:4)

使用ICU库。

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

例如:

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

是在字符串中以特定字符偏移量返回字符的函数。

答案 1 :(得分:1)

UTF8-CPP项目有一堆干净,易于阅读,类似STL的算法,可以通过代码点,逐个字符等迭代Unicode字符串代码点。您可以查看它以获取灵感。

请注意,“逐字符”方法可能并不明显。一种简单的方法是以规范化形式C迭代UTF-32字符串,这保证了固定长度编码。