4.细谈本地编码
什么是本地编码?
每一个操作系统都有本地编码,这个依照操作系统不同而不同,比如我们常见的window简体中文版操作系统,本地编码默认是gbk编码。举例说明一下本地编码:我们在桌面新建一个文本文件“测试文本.txt”,写入内容“123我爱你”,如图:
然后切换本地编码为美国英语。重写打开一下,看看里面内容:
我们看到同样一个文本,切换本地编码就表现大不相同。有的问会问了,好像中文路径名字都是一样的,这是因为windows内部统一采用UTF-16编码(网上看到的,确定性待分析)
如何查看本地编码?
方式1:cmd命令下输入chcp,如下图:
936就代表中文简体(GBK编码)。
方式2:
打开 控制面板->区域和语言->管理->更改系统区域设置,看到如下图:
现在采用的就是中文简体编码。
如何更改本地编码?
方法1,在上述描述中的控制面版里面改,改之后重启操作系统,整个操作系统默认编码都改变了。我们之前介绍什么是本地编码中更改本地编码采用的就是这种手段。
方法2,QTextCodec::setCodeForLocal(),这个只能对当前应用有效,并非全局设置。
Qt中本地编码有什么用,哪些动作和本地编码相关?
qt中有两个常用的函数和本地编码息息相关,QTextCodec::setCodecForLocal()设置本地编码。QString::fromLocal8Bit()从本地编码初始化一个字符串。比如说:文件采用ANSI编码,里面有个汉字字符,采用QString::fromLocal8Bit()包括,对QTextCodec::setCodecForLocal()不r进行设置,或者这是成本地编码,或本地编码的的方式:
QTextCodec::codeForLocal或者QTextCodec::codeForName("system")如果是window简体中文版操作系统也可以写成QTextCodec::codeForName("gb2312")。
举一个反面教材:
文本文件(ANSI)
+ QString::fromLocal8Bit()
+ QTextCodec::setCodecForLocal(QTextCodec::codeForName("utf-8"))
+ 简体中文版操作系统
= 乱码。
原因:本来清一色的 ANSI,却来了个UTF-8。红色标注的选项多次一举,不设置就会正常显示。