strlen如何计算c中的unicode

Hor*_*ith 5 c unicode count strlen

我很好奇strlen如何计算C中多个字节的unicode字符.

是否计算每个字节或字符(因为它们可以由几个字节组成)直到第一个'\ 0'?

Yu *_*Hao 7

strlen()计算\0遇到a之前的字节数.这适用于所有字符串.

对于Unicode,请注意,返回值strlen()可能受\0除null终止符之外的有效字符中可能存在的字节的影响.如果使用UTF-8,那很好,因为除了ASCII之外没有有效字符0可以有一个\0 字节,但对于其他编码可能不是这样.

  • 这取决于代码集.如果您使用的是UTF-16,那么诸如U + 00FF(ÿ)之类的字符将由空字节和0xFF字节组成(以一个或另一个顺序,取决于字节顺序:UTF-16LE或UTF-16BE) ,空字节将在其轨道中停止`strlen()`.使用UTF-32时,每个Unicode字符都会出现问题,因为最大值为U + 10FFFF,这意味着每个可能的4字节Unicode值中至少有一个零字节.UTF-8小心地避免了这个问题; 唯一一次出现零字节的时候是字符是U + 0000. (4认同)