今天一个兄嘚在用codeblocks写项目的过程中,出现了中文乱码的现象,报错是这个样子的:error: converting to execution character set: Illegal byte sequence|(大概就是非法字符的意思)
经过我一下午的摸索和结合网上各位的大佬的博客,把原因和解决方法简述如下:
出现中文乱码大部分就是你的系统本地编码和codeblocks的编译器编码不一致!!!!
- 首先,你先确定安装的codeblocks,一定要用其官网上的带mingw的安装包!!!!
专业点来说,就是本地化没做好,codeblocks编译器保存源代码的编码是系统默认的,也就是windows默认编码(我说的是你用的是Windows系统的情况下哈),Windows的默认编码就是WINDOWS-936字符集,也叫GBK编码。
但是呢(关键就在这),GCC(MinGW)编译器编译默认是按照UTF_8解析的,语法规则就不一样,解析出来的怎么可能是对的呢,就像你按英语的语法把中文翻译成英文,却把英文按德语的语法还原成中文,结果当然不可能一致咯,不乱码才不正常咯,所以呢,把这两者同一编码格式就🆗了。
好了,说一下解决方案:
修改源文件保存编码路径:Setting——Editor——Encoding settings
如下就是源文件保存的编码:
说一下:
Use encoding when opening files:表示当打开这个文件的时候使用这个格式,第一次保存的时候也是使用这个格式
As falling encoding:作为候选编码
As default encoding(bypassing C::B’s auto-detection):作为文件保存的默认编码格式和打开文件的编码格式)
2 .修改编译器解析编码格式和生成执行文件时采用的编码格式:Setting——compiler——other compiler options
如果刚刚你的文件保存编码格式是WINDOWS-936,那么就添加以下语段:
-finput-charset=WINDOWS-936或者GBK
-fexec-charset=WINDOWS-936或者GBK
如果是UTF-8,那么fexec-charset就可省略,或是把上所列举的语段改为UTF-8便可,如果不设置fexec-charset默认认为执行环境是UTF-8,在Linux系统下是没有问题的,但是在Windows下会出现乱码。
第一行语段表示编译器编译的时候对输入的源文件解释用的编码;
第二行表示编译好的执行文件所用编码。
这三者都达到同一,便不会出现乱码情况!
注意:要配置好,再把乱码的代码重新新建一个新文件来保存,再编译一遍就不会出错了,如果你没有重新新建文件运行代码,即使你配置好了,还是无法运行,因为他的源文件编码格式是之前的编码格式,比如说UTF-8,就会出现以下报错:
参考文献:大佬文献(详细版)