C UTF-8字符串大小(字节)

C UTF-8字符串大小(字节),c,utf-8,C,Utf 8,我需要在C中确定UTF-8字符串的长度(以字节为单位)。如何正确执行?据我所知,在UTF-8中,终端符号的大小为1字节。我可以为此使用strlen函数吗?是的,strlen()将简单地计算字节数,直到遇到NUL,NUL是以0结尾的UTF-8编码的C字符串的正确终止符 我能用strlen函数来做这个吗 是的,strlen提供第一个'\0'字符前面的字节数,因此 strlen(utf8) + 1 是utf8中的字节数,包括0-终止符,因为除'\0'以外的字符在UTF-8中不包含0字节 当然,这只有

我需要在C中确定UTF-8字符串的长度(以字节为单位)。如何正确执行?据我所知,在UTF-8中,终端符号的大小为1字节。我可以为此使用strlen函数吗?

是的,strlen()将简单地计算字节数,直到遇到NUL,NUL是以0结尾的UTF-8编码的C字符串的正确终止符

我能用strlen函数来做这个吗

是的,
strlen
提供第一个
'\0'
字符前面的字节数,因此

strlen(utf8) + 1
utf8
中的字节数,包括0-终止符,因为除
'\0'
以外的字符在UTF-8中不包含0字节


当然,这只有在
utf8
实际上是UTF-8编码的情况下才有效,否则需要先将其转换为UTF-8。

UTF-8没有定义字符串的终止方式。使用空字符
'\0'
终止字符串是一种C约定。UTF-8的全部要点是,您不必更改任何字符串处理实践。只有解释字符串字符的代码可能需要更改,即使如此,通常也只有在对ASCII范围之外的字符应用特殊解释时才需要更改。像
strlen
strstr
strchr
(用于搜索单字节字符),
snprintf
,等等都可以。谢谢您的解释@JoopEggen:不,拉丁语-1和高级控制字符在UTF-8中不是单字节。UTF-8中唯一的单字节字符是ASCII。在任何情况下,编码都与以字节为单位测量字符串的大小无关。@R。。正确的;事实上,我只想提到UTF-8的精确性,即由于位高,在UTF-8多字节序列中无法错误地找到整个7位ASCII范围。