字符串显示到UI界面上大致有三个阶段:源文件编码格式、编译存储编码格式、执行编码格式
1,源文件编码格式
我们的C/C++源文件一般有GBK、UNICODE(UTF8、UTF16、UTF32)等编码格式,其中UTF8分为带BOM和不带BOM,BOM其实就是标记双字节或者四字节字符是大端还是小端存储,所以其实UTF8是不需要BOM标记的。VC编译器不认不带BOM的UTF8文件,也就是VC编译器会把不带BOM的UTF8源文件当成ANSI编码处理,这种情况下如果你的代码里的字符串有中文字符肯定会乱码,原因是编译器不能正确转换字符串到存储编码格式。
2,编译存储编码格式
即编译器将源文件中的字符串常量(例如字符串 "中国" )编译存储到静态存储区中所用的编码格式 ,说明下 :L"中国",u"中国",U"中国" 等字符串常量显示指定了存储编码格式,编译器会按照你指定的去转码存储到静态存储区。 那么 char str[] = "中国" 这种字符串编译存储编码到底用什么格式呢?分两个阶段,首先在编译后字符串"中国"就存在静态存储区,然后运行时用这个内存初始化字符数组;
(1)VC编译器 在在VC下和本地化locale有关,如果你的系统是简体中