我有一系列Unicode代码点。我真正需要做的是将这些代码点作为字符序列而不是代码点序列进行迭代,并确定每个单独字符的属性,例如是字母还是其他内容。
例如,想象一下我正在编写一个Unicode-aware文本框,用户输入了一个多于一个代码点的Unicode字符,例如“带变音符的e”。我知道这个特定字符也可以表示为一个代码点,并且可以规范化为该形式,但我认为在一般情况下这是不可能的。我如何实现退格?显然不能只删除最后一个代码点,因为他们可能刚刚输入了多个代码点。
我如何将一堆Unicode代码点迭代为字符?
编辑:ICU提供的断点迭代器似乎就是我需要的。但是,我没有使用ICU,所以任何关于如何实现自己的等效功能的参考都是可接受的答案。
例如,想象一下我正在编写一个Unicode-aware文本框,用户输入了一个多于一个代码点的Unicode字符,例如“带变音符的e”。我知道这个特定字符也可以表示为一个代码点,并且可以规范化为该形式,但我认为在一般情况下这是不可能的。我如何实现退格?显然不能只删除最后一个代码点,因为他们可能刚刚输入了多个代码点。
我如何将一堆Unicode代码点迭代为字符?
编辑:ICU提供的断点迭代器似乎就是我需要的。但是,我没有使用ICU,所以任何关于如何实现自己的等效功能的参考都是可接受的答案。
另一个编辑:事实证明,Windows API确实提供了这个功能。MSDN只是没有很好地将所有字符串函数放在一起。CharNext就是我要找的函数。
BreakIterator
的功能,你需要查询unicode点的属性,以确定是否可以在它们之间断开。这需要下载Unicode规范并构建不同属性的代码点范围表。或者你可以直接使用ICU,它会为你完成这一切。 - Nicol Bolas