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

原文地址:https://www.cnblogs.com/personnel/p/12355801.html