0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何解决codeblocks编码问题

嵌入式单片机 来源:未知 作者:胡薇 2018-11-15 14:18 次阅读

要解决这个问题,先要搞清楚有三个地方涉及到编码问题。

1.1CodeBlocks编辑器保存源文件用的编码。

默认情况下,是保存为windows本地编码的,也就是WINDOWS-936字符集,也就是GBK编码。

但是很神奇的是,GCC编译器默认编译的时候是按照UTF-8解析的。你存成GBK,但是当成UTF-8解析,这还能编译通过,这才有鬼了,所以这两个地方编码不统一好,编译的时候报错:error: converting to execution character set: Illegal byte sequence,你根本连通过编译的可能性都没有!

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

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

这个编译器可以设置-finput-charset=charset来指定编译器用什么编码解释输入源文件。比如如果源文件的字符集是GBk,那么就必须指定-finput-charset=GBK,如果不指定,一律当做UTF-8处理。

除非你源文件真的是UTF-8,否则就会出现转换错误。

1.3编译好的执行文件所用编码

如果你1和2两个地方的编码都能统一,那么编译时不会报错了,但是编译好了,运行一下看看,在控制台显示的依然是乱码!

那是因为控制台显示的时候缺省的是使用系统默认的字符集,比如windows下用的是GBk,但是默认情况下,编译之后的执行文件时编译成UTF-8的,所以又出现了不统一,乱码由此而生!

解决的方法和简单,就是给编译器加上选项:-fexec-charset=GBK,和windows默认的统一,就OK了。

搞懂了乱码产生的原因,那么不难得出结论,如何修改,你想修改成什么都OK,关键是要统一,并不是像网上一些人说的,修改成GBK就OK,其实你要修改成UTF-8都OK,关键是统一。

1.4修改的地方。

1.修改源文件保存编码在:settings->Editor->gernal settings找到Encoding group Box

Use encoding when opening files:这个表示打开文件用的格式,第一次保存文件的时候也会用这个格式。

As default encoding:表示设置为文件缺省保存和打开编码格式

注意,要先设置好,然后保存文件,才有效。如果你已经保存了文件,无论你怎么修改这个设置,也不会改变你文件的格式了。你的文件还是保持第一次保存的时候的格式。所以,如果遇到无法生效,只能先设置好格式,再重新建文件了。

2.修改编译器对源文件解释编码格式和生成执行文件执行时候采用的编码格式是在settings->compiler and debugger settings里面,选择对应的GCC编译器

在other options里面加入:

-finput-charset=charset

-fexec-charset=charset

第一个参数表示编译的时候输入文件的编码解释格式,第二参数表示生成的执行文件执行的时候显示用的编码格式。这些参数如果和实际不吻合,必然产生乱码。只要吻合,就不会乱码了。

由于我的源文件格式是WINDOWS-936,但是这里设置成UTF-8,所以编译肯定报错!

只需要修改成-finput-charset=WINDOWS-936或者GBk,就编译通过了。

如果不设置fexec-charset默认会认为执行环境是UTF-8,而windows下并不是,所以Linux下没问题,因为linux就是UTF-8的,但是windows下必然出现乱码。所以设置成GBk,就统一了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    935

    浏览量

    54759
  • CodeBlocks
    +关注

    关注

    0

    文章

    24

    浏览量

    9475

原文标题:codeblocks编码问题

文章出处:【微信号:qrsworld,微信公众号:嵌入式单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    codeblocks经典

    codeblocks经典
    发表于 06-15 13:08

    神奇的codeblocks

    各位大神麻烦看看这是怎么回事,第二次计算的代码明显是错的,应该生成随机数,但无论我运行多少次总是正确的结果,这codeblocks难道还能自动改错吗?#include int main(void
    发表于 02-24 21:00

    在linux下安装codeblocks

    在linux下安装codeblocks后,写一段程序,编译都没有问题,到了运行阶段就出错,起初上网查没找到解决方案,后来看到百度文库里的一篇文章才解决了,原来是没有配置运行控制台,
    发表于 07-24 08:18

    Codeblocks编程报错是什么原因导致的?

    今天用Codeblocks 编程,出现一个错误,之前没有见过,求大神指点,是什么原因导致的。 c:winavrbin..libgccavr4.3.3........avrlibavr5crtm644pa.o:(.init9+0x0)||undefined reference to `main\'|
    发表于 10-31 07:43

    codeblocks 51单片机学习(一)

    codeblocks 51单片机学习(一)原先是在keil下进行51单片机编程的,那个时候跟着视频学,发现没学会什么,后来因某些原因重装了一下电脑,又准备继续学习51单片机,决定换一个环境,也就
    发表于 11-11 18:21 8次下载
    <b class='flag-5'>codeblocks</b> 51单片机学习(一)

    codeblocks环境下SDCC编译单片机程序

    1.分别下载安装Codeblocks + SDCC2. 在codeblocks中进菜单设置 settings/complier选择 Small Device C Complier,Set
    发表于 11-24 18:06 14次下载
    <b class='flag-5'>codeblocks</b>环境下SDCC编译单片机程序

    怎样在codeblocks上编写程序

    CodeBlocks上编写程序是一项相对简单而又重要的任务。CodeBlocks是一个广泛使用的集成开发环境(IDE),它能够帮助程序员编写、编译和运行他们的代码。在本篇文章中,我们将详细介绍
    的头像 发表于 11-26 09:26 1508次阅读

    codeblocks简单的加减法编程

    CodeBlocks是一种常见的集成开发环境(IDE),用于编写、运行和调试各种编程语言的程序。在本文中,我们将探索如何使用CodeBlocks进行加减法编程。我们将详细介绍CodeBlocks
    的头像 发表于 11-26 09:27 1102次阅读

    codeblocks如何恢复默认布局

    CodeBlocks 是一款流行的开源集成开发环境(IDE),适用于多种编程语言,如 C、C++、Fortran 等。在 CodeBlocks 中,您可以自定义和修改窗口布局,以满足个人编程需求
    的头像 发表于 11-26 09:35 6920次阅读

    codeblocks环境错误解决办法

    CodeBlocks是一款常用的集成开发环境,用于编写、编译和调试C、C++等程序。然而,有时在使用CodeBlocks时可能会遇到一些错误或问题。本文将为你提供一些常见CodeBlocks环境错误
    的头像 发表于 11-26 09:37 6631次阅读

    CodeBlocks保存的项目在哪找

    CodeBlocks是一个集成开发环境 (IDE),主要用于C和C++程序开发。它提供了一种方便的方式来编写、调试和构建代码。 首先,我们需要知道CodeBlocks的项目文件实际上是由多个文件组成
    的头像 发表于 11-26 09:40 2517次阅读

    CodeBlocks属于什么软件

    CodeBlocks是一款集成开发环境(Integrated Development Environment,简称IDE),专门用于编写、编辑、编译和调试程序的软件。它提供了一系列的工具和功能,方便
    的头像 发表于 11-26 09:53 3868次阅读

    codeblocks工具栏恢复

    CodeBlocks是一种开发环境,广泛用于编写和调试各种编程语言的源代码。它提供了用户友好的界面,以及各种工具和功能,方便程序员进行开发工作。而恢复CodeBlocks工具栏的功能也是程序员在
    的头像 发表于 11-26 09:57 4888次阅读

    codeblocks怎么创建c文件

    CodeBlocks 中,你可以按照以下步骤创建一个新的 C 文件: 步骤 1: 打开 CodeBlocks 首先,你需要打开 CodeBlocks IDE。你可以在开始菜单或快捷方式上找到它
    的头像 发表于 11-26 10:21 4498次阅读

    codeblocks可以做什么东西?

    Codeblocks是一个开源的集成开发环境(IDE),用于编写、编译和调试各种编程语言的程序。它是一个跨平台的开发工具,支持多种操作系统,包括Windows、Mac OS和Linux
    的头像 发表于 11-26 10:23 1769次阅读