彻底解决VisualSutdio中文乱码的问题

  • Post author:
  • Post category:其他

问题描述

在使用VS写QT的C++项目的时候,直接输入中文,但是一直乱码。如下图。后来找了一圈,发现windows默认使用的格式是GBK/GB2312/GB18030。如果要输入中文,需要对含中文的字符串进行转码。
在这里插入图片描述

解决办法

要按照下面的方式来写。

fromLocal8Bit的作用是使GBK/GB2312/GB18030格式的字符串转换成Unicode格式。

Dock->setWindowTitle(QString::fromLocal8Bit("课程列表"));

新出现的问题

过了一段时间,结果按照上面的方式写,又出现中文乱码,如下图。理论上来说,同样的代码执行结果应该是完全一样的。所以可能不是代码的问题,而是别的问题。
在这里插入图片描述

原因

经过排查和网上搜索相关的文章,发现问题的原因果然不在代码上,而文件的保存格式有问题。通常代码里面中文的编码格式会设置成UTF-8。但是UTF-8也分为两种,一种带签名,一种不带签名。带签名的会有BOM信息,来告诉应用程序所用的是UTF-8编码。

  • UTF-8(带签名):带有BOM信息,可以被应用程序识别为UTF-8编码。
  • UTF-8(不带签名):不带有BOM信息,不能被应用程序识别为UTF-8编码。在被其他文件include时,需要使用这种。

因为编码问题而出现乱码的情况,无非也就两种:一种是在应该使用UTF-8(带签名)的文件里使用不带签名的编码。另外一种是在不应该带签名的文件里面,使用了带签名的UTF-8编码,使文件有两层BOM信息,从而导致乱码。

上面问题出现的原因,是因为这个文件没有带BOM信息,导致应用程序无法识别,而出现乱码。

解决办法

  1. 在VS里,添加高级保存选项。
    A.选择工具→自定义→打开命令→菜单栏选择【文件】
    在这里插入图片描述

B.点击【添加命令】,选中【文件】,选择【高级保存选项】。
在这里插入图片描述

2.在菜单栏里,点击文件,打开高级保存选项。选择编码格式为【Unicode(UTF-8带签名)】,点击确定。
在这里插入图片描述
3.修改完成后,中文显示正常,如下图。中文乱码问题解决。
在这里插入图片描述


版权声明:本文为xinsui4350原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。