vs2017编码格式查看_VS2017里代码直接写中文的问题分析

本文介绍了在VS2017中编写跨平台QT应用时遇到的中文编码问题。原本使用GB2312编码在MAC下显示乱码,改为UTF8后,Windows下又出现乱码。通过研究发现,需要将文件保存为UTF8带BOM格式,以确保在不同平台上正确识别编码,避免乱码问题。
摘要由CSDN通过智能技术生成

需求是

1.跨平台

2.QT开发

3.不考虑海外发行的翻译问题。

在这样的背景下,我决定把中文直接写在代码里算了,本来是用key-value方式存在一个文本文件里进行读取,然后生成一个map存在内存里,这么做不会有编码问题,但是写起来比较麻烦,每次加文字都需要加key。

因为要跨平台,那就不能使用Ansi编码,不然的话中文在MAC下会直接显示为乱码的,因为用VS写中文是GB2312编码的,在MAC下读不出来。

然后把文件格式修改为UTF8,这里需要在VS里把高级保存选项给调出来,设置方式可以参考这个

vs2017显示高级保存选项-百度经验​jingyan.baidu.com

改为UTF8之后,在MAC下就没有问题了。。然后发现在windows下竟然出问题了,中文会显示乱码,经过仔细研究,发现需要用UTF8 WITH BOM (就是选项里的UTF8 带签名),这样就没问题了。

因为UTF8不带签名 和ANSI一样的,估计vs把文件当做ANSI来处理了,结果导致乱码。

存为UTF8带签名格式则文件开头有标志,该是能够识别出是UTF8格式

无签名格式的读取结果

a116c28c92e209df1e17f7be107252cc.png

有签名格式的读取结果

49666ea94e01efee1106267408c4a605.png

代码是:

int main()
{
    std::cout << "Hello World!n"; 
    FILE* f = fopen("F:workwuji-clientWuYunmodulesgameWaitAni.cpp", "r");
    unsigned char szTmp[1024] = {0};
    fread(szTmp, 1024, 1, f);
    fclose(f);
}

发现带签名格式只是在最前面多了EF BB BF 三字节

以上是我自己的研究

网上有一些文章可以参考

「带 BOM 的 UTF-8」和「无 BOM 的 UTF-8」有什么区别?网页代码一般使用哪个?​www.zhihu.com
zhihu-card-default.svg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值