风暴俱乐部|Windows平台C语言程序在控制台显示中文乱码分析及解决( 三 )

  • 默认:GCC编译器默认为UTF-8编码 。
  • 编码设置:GCC编译器可以通过设置-fexec-charset=选项来指定编译器用什么编码显示输出执行文件 。
  • 示例:-fexec-charset=GBK

  • 环节四、控制台使用的字符编码
    • 描述:控制台在显示所用的编码 。
    • 默认:Windows平台控制台默认使用WINDOWS-936代码页(即GBK编码);Linux控制台默认使用UTF-8编码 。
    • 编码设置:Windows平台可以通过注册表编辑器来指定控制台用什么编码显示输出执行文件 。
    3.2 原因分析Windows平台C/C++语言(中文)程序编译报错、在控制台执行时显示中文乱码一般都是由于编码不一致所引起的 。
    风暴俱乐部|Windows平台C语言程序在控制台显示中文乱码分析及解决原因分析
    3.2.1 编译报错原因分析从上图可以很清晰的看出编译报错的原因是在环节一与环节二两处的编码不一致(如下)所引起的:
    (一)上图中的1与4的组合(源文件保存为UTF-8编码 , 但GCC编译器对输入文件-源文件设置的是按GBK编码解析)
    (二)上图中的2与3的组合(源文件保存为GBK编码 , 但GCC编译器对输入文件-源文件设置的是按UTF-8编码解析)
    3.2.2 中文乱码原因分析从上图可以很清晰的看出中文乱码的原因是在环节三与环节四两处的编码不一致(如下)所引起的:
    (一)上图中的5与8的组合(GCC编译器对输出执行文件设置的是UTF-8编码 , 但Windows控制台是GBK编码)
    (二)上图中的6与7的组合(GCC编译器对输出执行文件设置的是GBK编码 , 但Windows控制台是UTF-8编码)
    4. 解决方法
    风暴俱乐部|Windows平台C语言程序在控制台显示中文乱码分析及解决4.1 解决思路通过上述原因分析 , 已经发现了编译报错和中文乱码的问题根源所在:前后环节的编码不一致造成 。
    既然问题根源找到了 , 那么解决思路也就迎刃而解了(如下图示):
    风暴俱乐部|Windows平台C语言程序在控制台显示中文乱码分析及解决解决思路
    一、在环节一和环节二之间保持两者编码的一致性(1和3组合 , 或2和4组合)进而解决编译报错问题;
    二、在环节三和环节四之间保持两者编码的一致性(5和7组合 , 或6和8组合)进而解决中文乱码问题 。
    4.2 编译报错解决针对编译报错的两种情形(1和4组合、2和3组合)具体解决办法是:
    4.2.1 方法一(1和3组合)修改源文件编码为UTF-8编码 , 以跟GCC编译器对输入文件-源文件默认UTF-8编码解析保持一致 。
    修改源文件编码为UTF-8编码的具体步骤如下:
    风暴俱乐部|Windows平台C语言程序在控制台显示中文乱码分析及解决修改源文件编码为UTF-8编码