Bov*_*ver 3 c encoding string-length strlen non-english
我有一个程序也接受非英语字符作为输入字段。因为我们使用strlen,所以当存在非英文字符时,在计算字符串长度时,它无法给出预期的长度。对于输入nova,输出是4,而对于输入\xc3\xb1ova,输出是5,而输出应该是4。
strlen("nova")=4strlen("\xc3\xb1ova")=5在第二种情况下,我期望输出为4相反。
请记住,strlen返回的计数char,这不一定与打印时可见字形的数量相同。
结果将取决于您系统的字符编码 - 使用 ISO-8859.1,与(长度 4)"\xc3\xb1ova"相同{ 241, 111, 118, 97, 0},但如果您使用 UTF-8,则为\xc3\xb1多字节字符,字符串表示为{195, 177, 111, 118, 97, 0}(length 5)。
如果您想计算代码点的数量,那么您可能需要使用mbrlen()而不是strlen(). 如果您想计算“用户”字符的数量,考虑到组合重音等,那么您确实需要一个字符处理库,例如 ICU。