有人可以解释为什么第一个功能有效而第二个功能无效吗?
unsigned int utf8_count(char* in)
{
unsigned int i = 0, c = 0;
while (in[i])
{
if ((in[i] & 0xc0) != 0x80)
c++;
i++;
}
return c;
}
unsigned int utf8_count(char* in, unsigned int in_size)
{
unsigned int i = 0, c = 0;
while (i < in_size)
{
if ((in[i] & 0xc0) != 0x80)
c++;
i++;
}
return c;
}
我明白了什么(in[i] & 0xc0) != 0x80
会,但我不明白为什么 i < in_size != in[i]
?
示例字符串:ゴールデンタイムラバー/スキマスイッチ
57 个字节,19 个字符。
为什么 utf8_count(in, 57)
返回 57 而不是 19?
示例字符串的二进制表示:
最佳答案
您看到的问题与您的示例字符串有关。
看ガールドンタイムラバー/スキマスイッチ
您的示例字节在空字节之前显示 18x '00111111'。
根据我的计算,第一个函数应该返回 18,第二个函数应该返回更大的数字。您确定传递的字符串正确吗?
我不认为你在图像中向我们展示的字节对应于文本 グールドンタイムラバー/スキマスイッチ
(如果只是因为我没有看到相同的字符重复多次这个字符串的开始。
关于c++ - utf8 字符计数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310201/