关于编译和运行过程中的字符编码转换的猜测

 

(1)源代码编码方式  ---> (2)编译器处理的编码方式 ---> (3)目标程序中的字符串编码方式 --> (4)控制台等运行环境编码方式

 

 

 

(1) 源文件编码方式无所谓,只要编译器认得就行;所以可以使用各种编码格式。

(2) 编译器编译源文件之前,先将源文件转为统一的编码方式(毕竟编译器不可能为每种源文件编码方式都准备一套处理逻辑;另外,windows核心运行的是unicode,有可能编译器也是只处理unicode的)。这个时候源文件包括里面的字符串常量都已经变成编译器确定的统一编码了。

(3) 编译的过程中,多字节常量字符串(例如:"abc中文")嵌入到目标程序中时被转化为当前操作系统支持的编码,如 GB2312,于是目标程序中的多字节常量字符串成了GB2312编码的了(可以在调试的时候查看字符串内存的值,得以印证)。而宽字符常量字符串被转为UNICODE嵌入到程序中。

(4) 当目标程序运行时,还要看到是控制台当前显示字符的是用的什么编码。这个是可以用代码设置的,例如程序运行的时候调用 setlocal() , std::wcout.imbue(std::locale("chs"));等。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值