您的位置:首页 > 其它

Codeblocks中文乱码原因分析和解决…

2014-04-17 15:10 681 查看
1.Code::Blocks 编辑器保存源文件用的编码。
默认情况下,是保存为windows本地编码的,也就是WINDOWS-936字符集,也就是GBK编码。
但是很神奇的是,GCC编译器默认编译的时候是按照UTF-8解析的。你存成GBK,但是当成UTF-8解析,这还能编译通过,这才有鬼了,所以这两个地方编码不统一好,编译的时候报错:error:converting to execution character set: Illegal bytesequence,你根本连通过编译的可能性都没有!
其实要解决这个问题很简单,编写Code::Blocks的人只需要在调用编译器之前检测一下源文件是什么编码,然后就自动让编译器用什么编码进行解释,问题就解决了。只是很可惜,Code::Blocks编写的人可能还没有这么做,或许是对本地化认识不够吧,也可能是觉得没必要吧?(所以就给初学的人带来问题了,所以就觉得易用性不如微软了,免费和商业的东西还是有差距的。。。)

2。GCC编译器编译的时候对输入的源文件解释用的编码
这个编译器可以设置-finput-charset=charset来指定编译器用什么编码解释输入源文件。比如如果源文件的字符集是GBk,那么就必须指定-finput-charset=GBK,如果不指定,一律当做UTF-8处理。
除非你源文件真的是UTF-8,否则就会出现转换错误。

3。编译好的执行文件所用编码
如果你1和2两个地方的编码都能统一,那么编译时不会报错了,但是编译好了,运行一下看看,在控制台显示的依然是乱码!
那是因为控制台显示的时候缺省的是使用系统默认的字符集,比如windows下用的是GBk,但是默认情况下,编译之后的执行文件时编译成UTF-8的,所以又出现了不统一,乱码由此而生!
解决的方法和简单,就是给编译器加上选项:-fexec-charset=GBK,和windows默认的统一,就OK了。(linux默认字符集是UTF-8)

补充 :WINDOWS-936其实就是GBK
原文链接:/article/9083940.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: