我想知道有一种简单的方法可以确定UTF8
字符串中的字符数。
例如,在Windows中可以通过以下方式完成:
UTF8
字符串转换为wchar_t
字符串wcslen
功能并获得结果但我需要更简单和跨平台的解决方案。
提前致谢。
答案 0 :(得分:4)
UTF-8字符是单个字节,其中最左边的位是0
,或者是多个字节,其中第一个字节的最左位1..10...
(数字为1)左边2或更多)后面是10...
形式的连续字节(即左边的单个1)。假设您的字符串格式正确,您可以循环遍历所有字节并在每次看到不是10...
形式的字节时递增“字符计数” - 即仅计算所有UTF中的第一个字节8个字符。
答案 1 :(得分:4)
“字符数”的整个概念并不真正适用于Unicode,因为代码不会将1:1映射到字形。如果你想以未压缩的形式建立存储要求,那么@borrible提出的方法很好,但这就是它可以告诉你的所有内容。
例如,存在像“零宽度空间”这样的代码点,它们在渲染时不占用屏幕上的空间,但是占用代码点,或者用于变音符号或元音的修饰符。因此,任何统计数据都必须具体到具体应用程序。
正确的Unicode渲染器将具有一个函数,可以告诉您如果该信息是您所追求的,将使用多少像素来渲染字符串。
答案 2 :(得分:1)
如果已知该字符串是有效的UTF-8,则只需以字节为单位取字符串的长度,不包括其值在0x80-0xbf范围内的字节:
size_t i, cnt;
for (cnt=i=0; s[i]; i++) if (s[i]<0x80 || s[i]>0xbf) cnt++;
请注意,s
必须指向unsigned char
数组,才能使比较有效。