zoukankan      html  css  js  c++  java
  • CodeBlocks 输出汉字变乱码或问号, 编辑器与编译器的参数设置

    算起来,使用 CodeBlocks 也有几年了,但对其了解只能算是皮毛,很多事情都是一知半解,没有搞清楚。

    平时没遇到问题,也就没想去研究。

    最近遇到一个很奇怪的问题,输出四个汉字其中一个变成问号。 

    白 单鞋   (注意:第一个汉字是 , 而不是)

    其中,第一个汉字在输出的时候变成了问号,这什么情况,几年来还是第一次遇到。

    下面,我简单的写了一个测试程序:

    const char *pszText = "3";
    printf("len:%d
    ", strlen(pszText));
    
    printf("pszText:'%s'
    ", pszText);

    输出的结果:

    len:2
    pszText:'?'

    很明显,结果不符合预期。

    我又测试了一下黑:

    const char *pszText = "3";
    printf("len:%d
    ", strlen(pszText));
    
    printf("pszText:'%s'
    ", pszText);

    输出的结果:

    len:3
    pszText:'黑3'

    这又正常了,很明显,我当前的编程环境并不是所有的汉字在输出时都变成问号,并且这几年来我的程序在输出汉字的时候没遇到过这种问题,直到今天遇到这个汉字:

    百度了一下后,找到这么几篇关于使用 CodeBlocks 中文变乱码的说明:

    https://www.cnblogs.com/didiaodidiao/p/9189463.html

    https://www.cnblogs.com/myfreedom614/archive/2012/04/10/2441173.html

    根据上面链接的文章提示,以及我测试的情况来看,由于几年来我写了几个项目,由于源代码使用的是 windows-936,也不想再重新修改源代码的编码格式的情况下,适合我的 CodeBlocks 的配置环境应该是:

     CodeBlocks 的【全局编译器设置】中,【其他编译器设置】中添加两行设置:

    -finput-charset=gbk
    -fexec-charset=gbk

    ---------------------------------------------------------------------

    -finput-charset:用来指定输入源文件的的字符编码

    -fexec-charset:输出的exe文件的字符编码集 (指定多字节字符串(const char *)常量在编译后的程序里保存的编码集)

    注意:如果将 fexec-charset 设置为 utf-8,Linux 默认会认为执行环境是 utf-8,而 windows 下并不是,所以Linux下没问题,因为Linux就是 utf-8,但是 windows 下必然出现乱码。

    ---------------------------------------------------------------------

    经过我的电脑测试:

    -finput-charset=gbk
    -fexec-charset=gbk

    -finput-charset=windows-936
    -fexec-charset=windows-936

    效果都一样,都能解决正常输出 黒 这个汉字。

    ---------------------------------------------------------------------

    后记:

    如果从一开始,在我没有编写任何项目的情况下,我会把源代码编码默认使用 utf-8,那么 CodeBlocks 的配置环境应该是:

    1. CodeBlocks 的编辑器设置中,【编码设置】应选择: utf-8,至于【设为默认的编码方式 (忽略 C::B 自动检测)】这一选项是否必须勾选,我不确定。

    2. CodeBlocks 的【全局编译器设置】中,【其他编译器设置】中添加两行设置:

    -finput-charset=utf-8
    -fexec-charset=gbk

    ---------------------------------------------------------------------

    -finput-charset:用来指定输入源文件的的字符编码

    -fexec-charset:输出的exe文件的字符编码集 (指定多字节字符串(const char *)常量在编译后的程序里保存的编码集)

    ---------------------------------------------------------------------

    ---------------------------------------------------------------------

    查看当前操作系统的代码页(Code Page):dos 下输入 chcp,可输出代码页信息。

    关于代码页(Code Page)的详细介绍: https://www.cnblogs.com/benbenalin/p/6911781.html

  • 相关阅读:
    127.0.0.1(转) Anny
    轮岗开发后再看测试(转) Anny
    如何做好功能测试的方法(转) Anny
    Search Framework: Search Result checklist(转) Anny
    What is a Private IP Address(转) Anny
    Private IP Addresses(转) Anny
    公共模式资源库链接 Anny
    What is Dynamic DNS? Anny
    随机数产生
    tomcat源码阅读_代码篇4
  • 原文地址:https://www.cnblogs.com/personnel/p/12355801.html
Copyright © 2011-2022 走看看