风暴俱乐部|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/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控制台上运行时显示中文乱码 , 如下图示:
控制台显示中文乱码1
或:
控制台显示中文乱码2
3. 原因分析Windows平台C/C++语言(中文)程序编译报错、在控制台执行时显示中文乱码一般都是由于编码不一致所引起的 。
3.1 编码环节简介首先 , 我们来看看在 Windows 平台上开发运行一个C/C++语言程序的全过程(源文件编辑、编译、运行)中主要涉及的编码环节有哪些?
C语言开发全过程涉及的编码环节
环节一、源代码保存时的字符编码
- 描述:指编辑器在保存源代码文件所使用的字符编码 。
- 默认编码:Windows平台上默认是保存为Windows本地编码 , 即WINDOWS-936代码页 , 也就是GBK编码 。
- 编码设置:可以通过编辑器设置来更改源文件保存编码 , 如保存为UTF-8编码 。
环节二、编译器编译时的输入文件(源文件)字符编码
- 描述:GCC编译器编译时对输入的源码文件解析时用的字符编码 。
- 默认:GCC编译器编译时对输入文件默认是按照UTF-8编码解析的 。
- 编码设置:可以通过设置编译器选项-finput-charset=
来指定编译器用什么编码解析输入的源文件 。 - 示例:-finput-charset=GBK
环节三、编译器编译好的输出文件(可执行文件)字符编码
- 描述:GCC编译器编译好的输出文件(可执行文件)所用的字符编码 。
推荐阅读
- 龙之队|Windows10上触控板失灵的3种解决方案
- 虎扑足球|巴黎也是一样,莱昂纳多:任何俱乐部要签人都得先卖人
- M体育地带|青春风暴!意媒排出米兰U23首发阵容
- 魏翊东|罕见!京媒名嘴魏翊东怒怼国安俱乐部:瞻前顾后的,你在怕啥?
- 平地一声雷|你在怕啥?,罕见!京媒名嘴魏翊东怒怼国安俱乐部:瞻前顾后的
- 微软|硬盘满了别发愁,Windows 10小工具帮你轻松释放存储空间
- 国内赛事|最具眼光的俱乐部!IG.Y再次夺得夏季赛冠军 焕烽发文祝贺
- 维特尔维斯塔潘|青春风暴席卷F1意大利站领奖台 加斯利能跟随维特尔维斯塔潘的步伐吗?
- 操作系统|最漂亮的国产操作系统,实用性不输Windows,因收费99元被吐槽
- 青年|兰陵王:我打不过风暴龙王,凯:我勉强打得过。他:这不难很轻松
