7

我有一系列 Unicode 代码点。我真正需要做的是将这些代码点作为一系列字符而不是一系列代码点进行迭代,并确定每个单独字符的属性,例如是一个字母,等等。

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

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

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

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

4

2 回答 2

5

使用 ICU 库。

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

例如:

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

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

于 2011-11-26T22:07:21.327 回答
1

UTF8-CPP项目有一堆干净、易于阅读、类似STL 的算法,可以逐个代码点、逐个字符地迭代 Unicode 字符串。您可以从中寻找灵感。

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

于 2011-11-26T22:11:43.867 回答