源文件字符集,编译器内部字符集,执行字符集,控制台乱码问题,Qt中文问题

  1. 源文件字符集:源文件本身也是文本文件,所以源文件字符集是指源文件保存时采用哪种字符集编码。VC++下源文件默认是gbk编码,如果想要更改,可以通过 文件-高级保存选项 修改某个源文件的编码方式,似乎没有什么选项能够设置创建项目时的源文件编码,需要自己一个一个设。

  2. 编译器字符集:编译器在读取源代码文件时所使用的内部字符集决定了编译器如何把读入的源代码文件字节流进行转换,转换是指从一种字符集编码的字节经过解码再编码到另一种字符集编码的字节。当然编译器内部采用什么字符集不是我们所关心的,是编译器内部的事情。

  3. 执行字符集:编译器在编译时会将 字符/字符串 常量从上一步编码得到的字节转化为相应的字符集,转化为哪种字符集决定了程序在运行时这些字符串采用了哪种字符集编码,举个例子:

printf("你好"); //程序在执行时 "你好" 这个字符串在内存中保存的是哪种字符集的编码呢?就由这个第3步决定。

那么,编译器到底会转化为哪种字符集呢?分2种情况:
1. 如果是窄字符/字符串”“(以char为单位),那么不同的编译器可能不一样。以VC++为例,它是由系统代码页决定的,比如在中文windows系统下就采用GBK编码。
2. 如果字符/字符串前有指定编码方式,那没什么好说的了,就采用指定的编码方式,如下:

char* s1 = u8"hello"; //窄字符串,utf-8编码 (C++11)
wchar_t* s2 =  L"hello"; //宽字符串,utf-16编码
char16_t* s3 =  u"hello"; //宽字符串,utf-16编码 (C++11)
char32_t* 
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值