文章目录

  • 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控制台的字符集(图形化的界面有单独的执行字符集)。

源字符集与执行字符集相关推荐

  1. mysql 数据库字符集转换_字符集介绍及mysql数据库编码转换

    一.字符集介绍: 1.ASCII ASCII是英文American Standard Code for Information Interchange的缩写,美国标准信息交换代码是由美国国家标准学会( ...

  2. oracle导入字符集,Oracle导入字符集问题

    1.导入给我的DMP文件 字符集是ZHS16GBK ,我本地服务器的字符集是AL32UTF8 ,导入数据是给出的提示 2.sqlplus用  sys登录 3.执行更改字符集语句 数据库字符集在创建后原 ...

  3. mysql zhs16gbk_更改Oracle字符集:把字符集ZHS16GBK换成UTF8

    更改Oracle字符集:把字符集ZHS16GBK换成UTF8 SQL> select name,value$ from props$ where name like '%NLS%'; NAME ...

  4. mysql查看当前字符集_Mysql 查看字符集设置

    MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...

  5. mysql查看当前表字符集_查看mysql字符集及修改表结构--表字符集,字段字符集

    MySQL 乱码的根源是的 MySQL 字符集设置不当的问题,本文汇总了有关查看 MySQL 字符集的命令.包括查看 MySQL 数据库服务器字符集.查看 MySQL 数据库字符集,以及数据表和字段的 ...

  6. sqlyog更改字符集编码_MySQL 字符集设置

    Linux(Ubuntu)环境描述具体操作,Unux与其基本一致,Windows路径配置上少有不同. 我们将讨论以下几个问题: 字符集问题表征 修正配置,设置默认字符集编码 在使用过程中强制设置字符集 ...

  7. oracle数据查字符集,Oracle数据库字符集的查询

    Oracle数据库字符集通俗的讲就是一个字节数据的相关的解释的符号集合,它具有 大小的差异,也有互相包容关系.Oracle是支持国家语言的相关体系结构,它允许你使用本地化语言来存储,处理,检索数据.它 ...

  8. oracle数据库如何修改字符集,修改oracle字符集

    一 修改数据库SERVER端字符集 数据库字符集在创建后原则上不能更改.如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换,或通过ALTER DATABASE CHA ...

  9. 源码|批量执行invokeAll()多选一invokeAny()

    ExecutorService中定义了两个批量执行任务的方法,invokeAll()和invokeAny(),在批量执行或多选一的业务场景中非常方便.invokeAll()在所有任务都完成(包括成功/ ...

最新文章

  1. 大厂面试通关图鉴:骚话走一走,百万薪到手!
  2. pod setup 慢 的问题
  3. 计算机重装系统知识,电脑重装系统基础知识扫盲贴
  4. EqualsBuilder和HashCodeBuilder
  5. 听着三只松鼠上市的钟声,罗永浩流下了悔恨的泪水
  6. python dataframe索引_pandas DataFrame 行列索引及值的获取的方法
  7. 3.安装Discuz
  8. java--cmd乱码
  9. CreatePipe()函数
  10. Entire Space Multi-Task Model: An Effective Approach for Estimating Post-CVR (ESSM)
  11. 网吧游戏更新服务器--------各种网卡参数设置
  12. 陈宁计算机辅助设计说课稿,《归去来兮辞》(并序)说课稿
  13. 建设工程施工劳务分包合同
  14. html5学生成绩表,学生成绩表excel
  15. 每天学点英语语法-重头开始8
  16. 平安云:在群雄逐鹿的云市场中野蛮生长
  17. 斩获iOS美国游戏榜单TOP2 触宝游戏战略进入高速发展轨道
  18. 区块链发展的重要里程碑
  19. JAVA中JButton常用设置
  20. Android开发——底部导航栏设计

热门文章

  1. 2.3 残差网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  2. 2.7 RMSprop-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  3. STM32 基础系列教程 11 – ADC 轮询
  4. TCL系列 - incr命令
  5. Xilinx---vivado系列
  6. ESP8266 SD卡FTP库测试报告、D1miniESP8266 SD卡FTP测试
  7. Linux下安装PPPOE SERVER
  8. 15.verilog可综合语句设计综述
  9. Spring实战(第3版)
  10. Python文件操作IO open 读-取-写