UTF-8字符串的字节大小

3

我需要确定C语言中UTF-8字符串的字节数。如何正确地执行?据我所知,在UTF-8中,终端符号大小为1字节。我能使用strlen函数吗?


UTF-8并没有定义字符串如何终止。使用空字符'\0'来终止字符串是C语言的惯例。 - Keith Thompson
2
UTF-8 的全部意义在于你不必改变你的任何字符串处理方式。只有解释字符串字符的代码可能需要更改,即使如此,通常也只有在将特殊解释应用于 ASCII 范围之外的字符时才需要更改。像 strlenstrstrstrchr(用于搜索单字节字符)、snprintf 等等这些函数都能正常工作。 - R.. GitHub STOP HELPING ICE
2个回答

11

我可以使用strlen函数吗?

是的,strlen函数可返回第一个'\0'字符前的字节数量,因此

strlen(utf8) + 1

这是utf8中字节数量,包括0终止符,因为在UTF-8中除了'\0'字符外没有其他字符包含0字节。

当然,这仅适用于utf8实际上是UTF-8编码的情况,否则您需要先将其转换为UTF-8。


@JoopEggen:不,Latin-1和高控制字符在UTF-8中不是单字节的。唯一的单字节字符是ASCII。无论如何,编码与以字节为单位测量字符串大小无关。 - R.. GitHub STOP HELPING ICE
@R.. 对的;实际上我只是想提一下UTF-8的好处,即由于高位比特,整个7位ASCII范围不会在UTF-8多字节序列中错误地找到。 - Joop Eggen

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接