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


后续国家标准GB18030技术上兼容GBK 。
注:微软Windows安排给GBK的代码页是936 , 所以编码格式WINDOWS-936其实就是GBK 。
1.5 UTF-8UTF-8(8-bit Unicode Transformation Format)是一种针对 Unicode 的可变长度字符编码 。 它可以用一至四个字节对 Unicode字符集中的所有有效编码点进行编码 , 属于Unicode 标准的一部分 。
自2009年以来 UTF-8一直是互联网上使用最广的一种编码方式 。
2. 问题描述
风暴俱乐部|Windows平台C语言程序在控制台显示中文乱码分析及解决初学者在Windows平台上进行C/C++语言(中文)程序编程开发时 , 有时会遇到编译报错、在控制台执行时显示中文乱码的问题 。
2.0 示例源码下面用于示例的一个C语言源代码文件(功能:从控制台显示一段中英文信息 。 )
#includeint main(void) {printf("+++++++++++++++++++++++++++\n");printf("++Hello, C语言开发者!++\n");printf("+++++++++++++++++++++++++++\n");return 0; }
2.1 编译报错第一类问题是:在编译时发现报错 , 报错信息如下:
hello.c: In function 'main': hello.c:6:12: error: converting to execution character set: Illegal byte sequenceprintf("++Hello, C语言开发者!++\n");^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.2 中文乱码第二类问题是:能顺利通过编译生成可执行文件 , 但该可执行文件在Windows控制台上运行时显示中文乱码 , 如下图示:
风暴俱乐部|Windows平台C语言程序在控制台显示中文乱码分析及解决控制台显示中文乱码1
或:
风暴俱乐部|Windows平台C语言程序在控制台显示中文乱码分析及解决控制台显示中文乱码2
3. 原因分析
风暴俱乐部|Windows平台C语言程序在控制台显示中文乱码分析及解决Windows平台C/C++语言(中文)程序编译报错、在控制台执行时显示中文乱码一般都是由于编码不一致所引起的 。
3.1 编码环节简介首先 , 我们来看看在 Windows 平台上开发运行一个C/C++语言程序的全过程(源文件编辑、编译、运行)中主要涉及的编码环节有哪些?
风暴俱乐部|Windows平台C语言程序在控制台显示中文乱码分析及解决C语言开发全过程涉及的编码环节
环节一、源代码保存时的字符编码

  • 描述:指编辑器在保存源代码文件所使用的字符编码 。
  • 默认编码:Windows平台上默认是保存为Windows本地编码 , 即WINDOWS-936代码页 , 也就是GBK编码 。
  • 编码设置:可以通过编辑器设置来更改源文件保存编码 , 如保存为UTF-8编码 。

环节二、编译器编译时的输入文件(源文件)字符编码
  • 描述:GCC编译器编译时对输入的源码文件解析时用的字符编码 。
  • 默认:GCC编译器编译时对输入文件默认是按照UTF-8编码解析的 。
  • 编码设置:可以通过设置编译器选项-finput-charset=来指定编译器用什么编码解析输入的源文件 。
  • 示例:-finput-charset=GBK

环节三、编译器编译好的输出文件(可执行文件)字符编码