刚开始使用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,然后保存并编译源文件。

  2. GCC编译器编译的时候对输入的源文件解释用的编码

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

  3. 编译可执行文件所用编码

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

Code::Blocks开发中的字符串编码错误的更多相关文章

  1. Mapreduce中的字符串编码

    Mapreduce中的字符串编码 $$$ Shuffle的执行过程,需要经过多次比较排序.如果对每一个数据的比较都需要先反序列化,对性能影响极大. RawComparator的作用就不言而喻,能够直接 ...

  2. 使用自己的Python函数处理Protobuf中的字符串编码

    我目前所在的项目是一个老项目,里面的字符串编码有点乱,数据库中有些是GB2312,有些是UTF8:代码中有些是GBK,有些是UTF8,代码中转来转去,经常是不太清楚当前这个字符串是什么编码,由于是老项 ...

  3. Vue CLI 3开发中屏蔽的EsLint错误 (.eslintrc.js 在vue3+中 修改这个)

    1.关闭eslint校验有了eslint的校验,可以来规范开发人员的代码,是挺好的.但是有些像缩进.空格.空白行之类的规范,在开发过程中一直报错,未免太过于苛刻了.所以,我还是会选择关闭eslint校 ...

  4. Code::Blocks生成的EXE文件执行错误解决:The program can't start because libgcc_s_dw2-1.dll is missing

    想用C++弄个简单东东,看有没有可行性, 开发软件,微软的太大太肿,就选用了Code::Blocks. 测试HELLO时,在工程环境中没问题的,但生成的EXE执行有问题, 报什么 libgcc_s_d ...

  5. Python2和Python3中的字符串编码问题解决

    Python2和Python3在字符串编码上是有明显的区别. 在Python2中,字符串无法完全地支持国际字符集和Unicode编码.为了解决这种限制,Python2对Unicode数据使用了单独的字 ...

  6. python中的字符串编码问题——4.unicode编解码(以实际工作中遇到的韩文编码为例)

    韩文unicode编解码  问题是这样,工作中遇到有韩文数据出现乱码,说是unicode码. 类似这样: id name 323 52186863 149 63637538 314 65516863 ...

  7. 关于python中的字符串编码理解

    python2.x 中中间编码为unicode,一个字符串需要decode为unicode,再encode为其它编码格式(gbk.utf8等) 以gbk转utf8为例: s = "我是字符串 ...

  8. javascript中的字符串编码、字符串方法详解

    js中的字符串是一种类数组,采用UTF-16编码的Unicode字符集,意味字符串的每个字符可用下标方式获取,而每个字符串在内存中都是一个16位值组成的序列.js对字符串的各项操作均是在对16位值进行 ...

  9. python中的字符串编码问题——1.理解编码和解码问题

    理解编码与解码(python2.7):1)编码 是根据一个想要的编码名称,把一个字符串翻译为其原始字节形式.>>> u_str=u'字符串编码aabbbcccddd'>> ...

随机推荐

  1. OpenGL绘制自由落体小球

    OpenGL绘制自由落体小球 一.    程序运行的软硬件环境 本次设计在window10系统下进行,运用C++进行编写,在CodeBlocks环境下使用OpenGL进行设计. 所需环境配置分为2部分 ...

  2. 2015年9月30日html表单笔记

    Asp.net是盖房子,那么html就是里面的砖头. 表单是非常重要的,为什么要使用表单呢?因为表单可以向服务器传输数据. 一般用form表单来传输数据. BS程序的执行模型具体流程是,个人电脑在表单 ...

  3. Windows Azure 的虚拟硬盘和文件的相关概念

    虚拟硬盘和文件 在 Windows Azure 外部,虚拟硬盘可使用 VHD 或 VHDX 格式.它们还可以是固定的.动态扩展或差异的.Windows Azure 支持 VHD 格式的固定磁盘.固定格 ...

  4. 【Java基础】Java多线程之线程组和线程池

    在上一篇文章中,讲述了线程的基本概念和用法,这里将继续讲述线程组和线程池的一些东西. 线程组:java.lang.ThreadGroup 1. 线程组的介绍 线程组表示一个线程的集合.此外,线程组也可 ...

  5. HW5.23

    public class Solution { public static void main(String[] args) { int count = 0; for(int i = 0; i < ...

  6. 如何获取、下载、安装fortran编译工具ifort

    今天接触到ifort,不知如何下载安装.遂GOOGLE之,很多文章给出连接并表示说在网页上下载即可.可往往事与愿违,新的问题是:链接已经失效:获取ifort的办法又不同了: 于是,我探索到新的获取安装 ...

  7. Dynamices CRM JS 类库 神器 XrmServiceToolkit - A Microsoft Dynamics CRM 2011 & CRM 2013 JavaScript Library

    XrmServiceToolkit - A Microsoft Dynamics CRM 2011 & CRM 2013 JavaScript Library http://xrmservic ...

  8. SSDT – Error SQL70001 This statement is not recognized in this context-摘自网络

    March 28, 2013 — arcanecode One of the most common errors I get asked about when using SQL Server Da ...

  9. light oj 1148 - Mad Counting

    1148 - Mad Counting   PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit: 32 MB M ...

  10. nyoj 282 You are my brother

    You are my brother 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 Little A gets to know a new friend, Litt ...