上篇文章《说说char》对比了linux和windows上分别使用gcc和vc编译器的情况,如果都使用gcc编译器会怎样呢?
gcc在window下内存:
linux和windows上使用gcc和vc的QString又是怎么来实现的呢?linux平台:
windows平台:
linux和windows平台上QString实现都是short来实现的,每个中文字符占用两个字节,编码是使用的utf-8。
在windwos下使用vc编译器生成的QString呢?
注意vc编译器8,文件保存为utf-8和gb2312,char仍旧是gb2312,wchar_t还是unicode,QString仍旧是两个字节的short,但是编码使用的是gb2312。
mingw编译gb2312文本需要添加编译参数 -finput-charset=GBK,gcc不管源码文件格式保存为什么,统一使用相同的方式保存,char:utf-8,wchar_t:unicode,QString:short utf-8
结论:
- gcc在windows和linux平台下统一使用utf-8保存char,unicode保存whar_t
- vc总是使用gbk保存char,unicode保存wchar_t
- gcc和vc内部编码格式与源文件保存编码格式无关
- QString的编码保存与编译器有关,但都是使用short来做容器
标准C++的实现中对wchar_t的支持不是很多,vc自己在库中大量添加了很多的wchar_t扩展函数,为跨平台迁移带来了一些问题。