码迷,mamicode.com
首页 > 编程语言 > 详细

C++运行字符编码于MSVC和GCC之间的区别

时间:2014-05-31 12:57:00      阅读:367      评论:0      收藏:0      [点我收藏+]

标签:c   blog   code   http   a   文件   

详细请参考这篇博文

http://blog.csdn.net/dbzhang800/article/details/7540905

 

运行字符编码就是指,当你源代码写下const char* p = "我";的时候(不管源文件保存为什么编码格式,但标准规定源文件带bom utf8),编到二进制模块内的常量p的内容究竟是什么编码,GBK?UTF8?还是其他?

C++根据编译器不同,有不同的行为:

GCC可以使用编译参数指定

而MSVC是根据操作系统“非Unicode程序的语言”这个设置来编码,为什么,微软保证在什么系统上编出来的程序,在该系统上运行不会乱码,回想以前的windows是没有unicode的,API接口都是本地字符集编码的

ok,下面是整个流程:

1.源代码按某编码保存

2.编译器-根据源代码编码及运行时字符编码进行转码

3.把转码后的内容编导二进制模块内

 

有兴趣可以做个实验,MSVC,源代码内写const char* p = "我";源代码不管用什么编码保存(为了严谨,你也可以保存为bom utf8),然后编译运行,下个断点,看看p的内容是什么编码,在(中文简体,中国)的设置下,编出来的程序p的内容是GBK编码的“我”。ok,然后改一下区域和语言里的“非Unicode程序的语言”,随便改个不认识的国家,然后编译下断点运行,看看p的内容是什么。内容跟修改区域之前的内容是不一样的,而且,在编译的时候,MSVC还可能会包警告说无法转码。这就是上面说的步骤2和步骤3的结果。

 

还需要注意,即使我们使用wchar_t*,也不能保证内容一致,因为wchar_t在不同编译器上有不同的长度,也有不同的编码,所以C++11有u8 u16 u32类型的字符,真是好极了。

C++运行字符编码于MSVC和GCC之间的区别,布布扣,bubuko.com

C++运行字符编码于MSVC和GCC之间的区别

标签:c   blog   code   http   a   文件   

原文地址:http://www.cnblogs.com/rickerliang/p/3732027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!