如何知道utf8字符串中的字符数

时间:2011-08-18 13:33:29

标签: c string utf-8 character-encoding

我想知道有一种简单的方法可以确定UTF8字符串中的字符数。 例如,在Windows中可以通过以下方式完成:

  1. UTF8字符串转换为wchar_t字符串
  2. 使用wcslen功能并获得结果
  3. 但我需要更简单和跨平台的解决方案。

    提前致谢。

3 个答案:

答案 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数组,才能使比较有效。