前言
相信大伙在做c++开发时,都应该遇到过中文显示乱码这个问题.这对于小白来说可能是一个比较头疼的问题之一.. 可能很多人不理解这个中文乱码其原因是什么..今天小编带家人们来分析一下关于乱码产生的原因.....在分析之前先介绍一个汉字编码查询的网页https://www.qqxiuzi.cn/bianma/zifuji.phphttps://www.qqxiuzi.cn/bianma/zifuji.php
目录
1.源字符集,执行字符集,系统字符集
编译器转换程序源代码时,所处的环境称为翻译环境(translation environment);编译后程序执行时,所处的环境称为运行环境(execution environment)。
对C语言来说,翻译环境和运行环境是不同的。因此,C语言定义了两个字符集(character set):源代码字符集与运行字符集。
- 源代码字符集(source character set)是用于组成C源代码的字符集合;
- 而运行字符集(execution character set)是可以被执行程序解释的字符集合。
- 操作系统字符集 ,windows中文版默认采用gbk编码
而程序的运行字符集和操作系统字符集一致才不会出现乱码现象
在许多C语言的实现版本中,这两个字符集是一样的。如果不一样,则编译器会把源代码中的字符常量和字符串字面量转换成运行字符集中的对应元素。
这段内容摘自C语言源代码字符集和运行字符集 (biancheng.net)http://c.biancheng.net/view/175.html
2.字符常量和字符串字面量在程序中的存储字符集
程序中字符串在char数组和程序静态常量区采用何种编码来保存字符串的,
1.采用gb2312编码保存的cpp源文件
2.修改执行字符集及例子
//C++中可以使用这行预处理指令来修改执行字符集
#pragma execution_character_set("utf-8")
//#pragma execution_character_set("gbk")
这是采用gb2312编码保存的源文件,且修改了执行字符集的运行效果图
查询对应上图的字符集编码表 确实修改了字符串在程序静态区和char数组中的编码