我想知道,有没有办法获取存储在 CoreFoundation 框架的 CFString 对象中的字符数(由底层 Unicode代码点表示)。
有可用的功能:CFStringGetLength
,但它并没有做它看起来做的事情。
示例:我正在尝试获取包含位于第二个(SMP)Unicode 平面中的一个字符( Shavian Alphabet的字母“peep”)的字符串长度。
UInt8 arr[] = {0xf0, 0x90, 0x91, 0x90}; //UTF8
CFStringRef r = CFStringCreateWithBytes(0, arr, sizeof(arr),
kCFStringEncodingUTF8, false);
CFIndex length = CFStringGetLength(r);
文档指出它返回:
存储在字符串中的字符数(根据 UTF-16 代码对)。
正如你所看到的,这句话是矛盾的——字符数并不总是等于 UTF-16 代码点的数量。但是,大括号中的部分更准确 - 函数的实际结果是 UTF-16 序列的数量。在我的示例中,函数的结果为2(以 UTF-16 编码字符所需的序列长度),而函数名称表明结果为1(在我看来)。
我想找到一种方法来获取Unicode 代码点方面的字符数。有什么办法可以在 CoreFoundation 中做到这一点?