2013-05-02 62 views
3

我需要确定以字节为单位的UTF-8字符串的长度。如何正确执行?据我所知,在UTF-8终端符号中有1个字节的大小。我可以使用strlen这个功能吗?以字节为单位的UTF-8字符串大小

+0

UTF-8没有定义字符串如何终止。使用空字符“'\ 0”来终止一个字符串是一个C约定。 – 2013-05-02 15:18:06

+2

UTF-8的重点在于,您不必更改任何**字符串处理实践。只有解释字符串字符的代码才有可能需要改变,即使这样,通常只有当它对ASCII范围以外的字符应用特殊解释时才需要改变。诸如'strlen','strstr','strchr'(用于搜索单字节字符),'snprintf'等等都可以工作。 – 2013-05-02 16:07:13

+0

感谢您的解释! – 2013-05-02 17:05:34

回答

11

我可以使用strlen函数吗?

是,strlen给你一个字节数第一'\0'字符之前,所以

strlen(utf8) + 1 

是字节的utf8包括0终止的数量,因为没有比'\0'包含其它字符UTF-8中的0字节。

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

+0

@JoopEggen:不,Latin-1和高级控制字符在UTF-8中不是单字节。 UTF-8中只有**的单字节字符是ASCII。无论如何,编码与以字节为单位测量字符串的大小无关。 – 2013-05-02 16:05:08

+0

@R .. right;实际上我只想提到UTF-8的优点,即整个7位ASCII范围不会由于高位而在UTF-8多字节序列中错误地发现。 – 2013-05-02 20:46:42

2

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

相关问题