繁体   English   中英

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

[英]How to know the number of characters in utf8 string

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

  1. UTF8字符串转换为wchar_t字符串
  2. 使用wcslen函数并获得结果

但我需要更简单和跨平台的解决方案。

提前致谢。

UTF-8字符是单个字节,其中最左边的位是0或多个字节,其中第一个字节具有最左边的位1..10... (左边的1的数量为2或更多) )后跟表格10...的连续字节10... (即左边的单个1)。 假设你的字符串格式正确,你可以循环遍历所有字节并在每次看到一个不是10...的形式的字节时递增你的“字符数” 10... - 即只计算所有UTF-8中的第一个字节字符。

“字符数”的整个概念并不真正适用于Unicode,因为代码不会将1:1映射到字形。 如果你想以未压缩的形式建立存储需求,那么@borrible提出的方法很好,但这就是它可以告诉你的全部内容。

例如,存在像“零宽度空间”这样的代码点,其在渲染时不占用屏幕上的空间,而是占用代码点,或者用于变音符号或元音的修饰符。 因此,任何统计数据都必须特定于具体应用程序。

正确的Unicode渲染器将具有一个函数,可以告诉您如果该信息是您所追求的,将使用多少像素来渲染字符串。

如果已知该字符串是有效的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数组才能使比较起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM