Code::Blocks开发中的字符串编码错误

刚开始使用Code::Blocks开发Windows中文应用程序的朋友们,如果在代码中使用了中文字符串,编译时可能遇到过Illegal byte sequence或Failure to convert GBK to UTF-8这样的错误提示。这类错误的原因在于源代码文件编码和编译器编码设置不一致造成的。

  1. Code::Blocks 编辑器保存源文件用的编码。

    默认情况下,是保存为windows本地编码的,也就是WINDOWS-936字符集,也就是GBK编码。但是GCC编译器默认编译的时候是按照UTF-8解析的(linux默认字符集是UTF-8),如果没有声明编码格式,编译器会把GBK当成UTF-8解析,从而导致编译错误。编译时报错:
    error: converting to execution character set: Illegal byte sequence.

    其实要解决这个问题很简单,编写Code::Blocks的人只需要在调用编译器之前检测一下源文件是什么编码,然后就自动让编译器用什么编码进行解释,问题就解决了。只是很可惜,Code::Blocks编写的人可能还没有这么做,或许是对本地化认识不够吧,也可能是觉得没必要吧?(所以就给初学的人带来问题了,所以就觉得易用性不如微软了,免费和商业的东西还是有差距的。。。)

    通常情况下,只要在Code::Blocks(13.12)中将源代码文件保存为UTF-8格式,就可以消除上述错误。操作方法是在源代码文件窗口激活的情况下,通过在编辑(Edit)菜单下的文件编码(Encoding)子菜单中选择BOM和UTF-8,然后保存并编译源文件。
    image
  2. GCC编译器编译的时候对输入的源文件解释用的编码

    GCC编译器可以通过-finput-charset=charset设置来指定编译器用什么编码解释输入源文件。比如源文件的字符集是GBK,那么就必须指定-finput-charset=GBK,如果不指定,一律当做UTF-8处理,这时如果源文件编码不是UTF-8,编译时就会出现编码转换错误。
    在Code::Blocks 13中也可以进入设置菜单打开编辑器设置对话框,在常规设置的“其它”页面中修改这一编码(如下图)。
    image
  3. 编译可执行文件所用编码

    如果源代码文件和编译器输入设置的编码是一致的,编译时就不会报错了,但是编译后运行时,在控制台显示的依然是乱码!
    那是因为控制台显示的时候缺省的是使用系统默认的字符集,比如windows下用的是GBK,但是默认情况下,编译之后的执行文件时编译成UTF-8的,所以又出现了不统一,乱码由此而生!
    要解决这一问题,需要在CodeBlocks的编译器设置。进入设置菜单打开编译器设置对话框,选择编译器设置的其它选项页面(如下图),添加选项:-fexec-charset=GBK。image
    重新编译后,应用程序就可以正常运行了。

转载于:https://www.cnblogs.com/frankshcn/p/5373466.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境.   相比于基于Delphi的Dev-C++共享C++IDE,Code::Blocks是开放源码软件。Code::Blocks由纯粹的C++语言开发完成,它使用了蓍名的图形界面库wxWidgets(2.6.2 unicode)版。对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格。   虽然Code::Blocks从一开始就追求跨平台目标,但是最初的开发重点是Windows系统下的版本,从06年3月21日版本:1.0 revision 2220开始,Code::Blocks在它的每日构建正式提供Linux版本(分两个版本:ubuntu.deb和fc4.rpm)。这样 Code::Blocks在1.0发布时就会是跨越平台的C/C++IDE,它将支持Windows和Linux的主要版本。长期以来C++开发员在Linux没有好用、通用的C++ IDE的局面就要结束。而这个IDE对于Windows下的用户同样重要,由于它开放源码的特点,Windows用户可以不依赖于VS.NET,编写跨平台C++应用。   Code::Blocks提供了许多工程模板,这包括:控制台应用、DirectX应用、动态连接库、FLTK应用、GLFW应用、Irrlicht工程、OGRE应用、OpenGL应用、QT应用、SDCC应用、SDL应用、SmartWin应用、静态库、Win32 GUI应用、wxWidgets应用、wxSmith工程,另外它还支持用户自定义工程模板。在wxWidgets应用选择UNICODE支持文。   Code::Blocks支持语法彩色醒目显示,支持代码完成(目前正在重新设计过程)支持工程管理、项目构建、调试。   Code::Blocks支持插件,目前的插件包括代码格式化工具AStyle;代码分析器;类向导;代码补全;代码统计;编译器选择;复制字符串到剪贴板;调试器;文件扩展处理器;Dev-C++ DevPak更新/安装器;DragScroll,源码导出器,帮助插件,键盘快捷键配置,插件向导;To-Do列表;wxSmith;;wxSmith MIME插件;wsSmith工程向导插件;WindowsXP外观。   Code::Blocks具有灵活而强大的配置功能,除支持自身的工程文件、C/C++文件外,还支持AngelScript、批处理、CSS文件、D语言文件、Diff/Patch文件、Fortan77文件、GameMonkey脚本文件、Hitachi汇编文件、Lua文件、MASM汇编文件、Mathlab文件、NSIS开源安装程序文件、Ogre Compositor脚本文件、Ogre Material脚本文件、OpenGL Shading语言文件、Python文件、Windows资源文件、XBase文件、XML文件、nVidia cg文件。识别Dev-C++工程、MS VS 6.0-7.0工程文件,工作空间、解决方案文件。   Code::Blocks基于wxWidgets开发,正体现了wxWidgets的强大。以前Borland C++ Builder X宣称基于wxWidgets开发跨平台、兼容性好、最优秀的C++ IDE环境,但没有实现;现在Code::Blocks+GNU GCC正在实现这个理想。让我们拭目以待。国内的Code::Blocks爱好者和跨平台开发员应该尽快建立Code::Blocks网站,提供Code::Blocks文化支持,促进Code::Blocks在国内的发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值