为什么C++和Python计算中文字符串长度的结果存在差异?
字符串长度计算结果差异原因
两种语言的统计逻辑和底层字符串存储编码不同,具体如下:
- 计数规则不同
Python 3的str类型是原生Unicode字符串,内置的len()方法统计的是Unicode字符个数,和单个字符占用的字节数无关。4个中文字符自然返回4。
C++的std::string本质是字节序列容器,length()方法统计的是字符串占用的总字节数,不是实际的字符数量。 - 编码占用字节不同
绝大多数环境默认使用UTF-8编码存储中文,每个中文字符在UTF-8下占用3个字节,4个中文字符总字节数就是4*3=12,和C的输出结果完全匹配。如果C环境使用GBK编码,每个中文字符占2字节,返回结果就会变成8。
补充说明:如果需要在C++中统计Unicode字符数,不能直接用
std::string的length()方法,需要引入专门的Unicode处理库,或者使用std::wstring等宽字符类型配合对应接口,同时要注意不同平台wchar_t的实现差异。
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

