源字符集与执行字符集
文章目录
- 1 源字符集
- 1.1 源字符集的概念
- 1.2 明确源字符集的重要性
- 2 执行字符集
- 2.1 执行字符集的概念
- 2.2 修改执行字符集
1 源字符集
1.1 源字符集的概念
源字符集: 保存源文件时所使用的字符集。
注意:这里的字符集指的其实是字符编码。因为,一个字符集可能有多种字符编码,比如Unicode字符集中就有UTF-8、UTF-16、UTF-32等。所以,我们保存源文件只指定字符集是不行的,我们需要明确指定具体的字符编码。字符集、字符编码这两个词经常被混用,所以,我们需要根据上下文来判断,字符集到底指的是什么。
1.2 明确源字符集的重要性
C实现在转换源文件时,必须要知道源文件在保存时所使用的字符集(源字符集)。因为,不同的字符集对同一个字符的编码可能是不同的。所以,如果C实现不知道源字符集是哪个,那么,它就无法正确的识别源文件的内容,就更不要说进行语法分析了。
如果源文件中只包含了ASCII字符,那么,在保存源文件时,我们基本上不需要关心源字符集的问题。因为,基本上常见的字符集都是兼容ASCII的(UTF-16和UTF-32不兼容ASCII)。
但是,如果源文件中使用了汉字。那么,在保存源文件时,我们就需要关心一下源字符集的问题了。因为,不同的字符集对同一个汉字的编码可能是不同的。
对于gcc:
Linux下gcc是默认使用UTF-8来读取源文件的(Windows下的gcc默认是GBK编码),而UTF-8也是兼容ASCII的,所以一般情况下是不会出问题的。
当源字符集是GBK的时候,我们需要手动设定gcc读取源文件时使用的字符集:
- gcc 1.c -finput-charset = gbk,gcc 将使用gbk来读取源文件
2 执行字符集
2.1 执行字符集的概念
源文件中的内容,本质上其实就是一堆字符(因为,源文件是一个文本文件)。这些字符组成了声明、语句、函数等等(当然了,计算机是看不懂的)。然后,当源文件被转换为可执行程序以后,这些由字符所组成的源代码,都将被替换为实现了相同功能的机器指令。但是,源文件中的字符串、字符常量等信息文本,并不会被替换为相应的机器指令。因为,它们并不对应某个功能,它们一般是用来打印和输出、传输。所以,它们在可执行文件(程序)中存储的仍然是其所对应的字符编码。
接下来的问题是:字符串、字符常量等信息文本在可执行文件中是按照哪种字符编码来存储的?这是由gcc来决定的:Linux下gcc默认使用UTF-8来存储这些信息文本到可执行文件中。
更改gcc的默认设置:
- gcc 1.c -fexec-charset = gbk(gcc将使用gbk来存储这些信息文本到可执行文件中)
执行字符集: 执行环境所使用的字符集。
2.2 修改执行字符集
执行环境所使用的字符集具体是哪个字符集呢?
我们为什么要关心这个问题呢?因为,如果执行字符集和可执行程序中信息文本所使用的字符集不一致。那么,程序在被执行的时候,程序中的信息文本会被错误的解析。
Linux终端:
- 默认为UTF-8。
- 终端属性中即可修改。
windows控制台:
- 默认为GBK。
- 代码页/内码表 :windows给每个字符集分配了一个编号、比如:GBK–>936、UTF-8–>65001。
- 当前/活动代码页 : 活动代码页为936,就表示当前正在使用的字符集是gbk。
- 查看活动代码页 :chcp。
- 设置活动代码页 :chcp 65001。
注意: 执行字符集 != Linux终端的字符集、windows控制台的字符集(图形化的界面有单独的执行字符集)。
源字符集与执行字符集相关推荐
- mysql 数据库字符集转换_字符集介绍及mysql数据库编码转换
一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...
- oracle导入字符集,Oracle导入字符集问题
1.导入给我的DMP文件 字符集是ZHS16GBK ,我本地服务器的字符集是AL32UTF8 ,导入数据是给出的提示 2.sqlplus用 sys登录 3.执行更改字符集语句 数据库字符集在创建后原 ...
- mysql zhs16gbk_更改Oracle字符集:把字符集ZHS16GBK换成UTF8
更改Oracle字符集:把字符集ZHS16GBK换成UTF8 SQL> select name,value$ from props$ where name like '%NLS%'; NAME ...
- mysql查看当前字符集_Mysql 查看字符集设置
MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...
- mysql查看当前表字符集_查看mysql字符集及修改表结构--表字符集,字段字符集
MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...
- sqlyog更改字符集编码_MySQL 字符集设置
Linux(Ubuntu)环境描述具体操作,Unux与其基本一致,Windows路径配置上少有不同. 我们将讨论以下几个问题: 字符集问题表征 修正配置,设置默认字符集编码 在使用过程中强制设置字符集 ...
- oracle数据查字符集,Oracle数据库字符集的查询
Oracle数据库字符集通俗的讲就是一个字节数据的相关的解释的符号集合,它具有 大小的差异,也有互相包容关系.Oracle是支持国家语言的相关体系结构,它允许你使用本地化语言来存储,处理,检索数据.它 ...
- oracle数据库如何修改字符集,修改oracle字符集
一 修改数据库SERVER端字符集 数据库字符集在创建后原则上不能更改.如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换,或通过ALTER DATABASE CHA ...
- 源码|批量执行invokeAll()多选一invokeAny()
ExecutorService中定义了两个批量执行任务的方法,invokeAll()和invokeAny(),在批量执行或多选一的业务场景中非常方便.invokeAll()在所有任务都完成(包括成功/ ...
最新文章
- 大厂面试通关图鉴:骚话走一走,百万薪到手!
- pod setup 慢 的问题
- 计算机重装系统知识,电脑重装系统基础知识扫盲贴
- EqualsBuilder和HashCodeBuilder
- 听着三只松鼠上市的钟声,罗永浩流下了悔恨的泪水
- python dataframe索引_pandas DataFrame 行列索引及值的获取的方法
- 3.安装Discuz
- java--cmd乱码
- CreatePipe()函数
- Entire Space Multi-Task Model: An Effective Approach for Estimating Post-CVR (ESSM)
- 网吧游戏更新服务器--------各种网卡参数设置
- 陈宁计算机辅助设计说课稿,《归去来兮辞》(并序)说课稿
- 建设工程施工劳务分包合同
- html5学生成绩表,学生成绩表excel
- 每天学点英语语法-重头开始8
- 平安云:在群雄逐鹿的云市场中野蛮生长
- 斩获iOS美国游戏榜单TOP2 触宝游戏战略进入高速发展轨道
- 区块链发展的重要里程碑
- JAVA中JButton常用设置
- Android开发——底部导航栏设计