路漫漫其修远兮 吾将上下而求索

codeblocks编码问题原因及解决方案

一:codeblock中有3类字符集

1. 文件字符集:

   (1) 源文件本身也是文本文件,所以源文件字符集是指源文件保存时采用哪种字符集编码。
   (2) VC++下源文件默认保存为windows本地编码的,也就是WINDOWS--936字符集,也就是GBK编码。
   (3) 但是GCC编译器默认编译时按照UTF-8解析,字符集之间转换会出现乱码。如果想要更改,应在保存前修改编码,方式为:settings->Editor->general settings ,在Encoding groupBox中,修改为UTF-8。

2. 编译器字符集:

   (1)编译器在读取源代码文件时所使用的内部字符集决定了编译器如何把读入的源代码文件字节流进行转换,转换是指从一种字符集编码的字节经过解码再编码到另一种字符集编码的字节。
   (2)当然编译器内部采用什么字符集不是我们所关心的,是编译器内部的事情。
   (3)可以设置-finput-charset=charset来指定编译器用什么编码解释输入源文件。比如,如果源文件的字符集是GBk,那么就必须指定-finput-charset=GBK,源文件的字符集是UTF-8,那么就必须指定-finput-charset=UTF-8,如果不指定,一律当做UTF-8处理。除非你源文件真的是UTF-8,否则就会出现转换错误。
   (4)方法:方法:settings->Compiler->Other compiler options,手动添加  -finput-charset=charset。

3. 执行字符集:

   (1)编译器在编译时会将从源文件编码得到的字节转化为相应的编译器字符集,转化为哪种字符集决定了:程序在运行时这些字符串采用了哪种字符集编码,(如未指定,编译时常解析成UTF-8字符集编码,那么运行时就会采用UTF-8执行字符集)
   (2)控制台显示的时候是使用系统默认的字符集,比如windows下用的是GBk,但是默认情况下,编译之后的执行文件时编译成UTF-8的,所以又出现了不统一,乱码由此而生!
   (3)解决的方法和简单,就是给编译器加上选项:-fexec-charset=GBK,和windows默认的统一,就OK了。方法:settings->Compiler->Other compiler options,手动添加  -fexec-charset=charset。
   (4)如果不设置fexec-charset默认会认为执行环境是UTF-8,而windows下并不是,所以Linux下没问题,因为Linux就是UTF-8的,但是windows 下必然出现乱码。所以设置成GBk,就统一了。

懂了乱码产生的原因,那么不难得出结论,如何修改,你想修改成什么都OK,关键是要统一

二:具体操作如下

(1)源文件编码修改
路漫漫其修远兮 吾将上下而求索_第1张图片
(2)编译和运行编码修改
路漫漫其修远兮 吾将上下而求索_第2张图片

(三)转载

你可能感兴趣的:(codeblocks)