前言
VS的编码问题历来令人头疼,虽然GBK编码方式更友好,但实际上不利于跨平台,跨开发工具。
我在VS2019 + Qt5.14环境的时候就遇到了问题,Qt默认是用UTF-8,那么很容易造成乱码问题,不是控制台乱码,就是Qt界面乱码。
网上的千篇一律的办法,有的是通过
#ifdef WIN32
#pragma execution_character_set("utf-8")
#endif
虽然也能解决,但并不是很好的解决方案,而且不够漂亮完美,我很不喜欢。
所以一阵研究,找到了更好的办法
综合考虑,VS2019采用UTF-8 with BOM编码会更好一点,以下方案也是改成UTF-8 with BOM,当然也适用于只想要UTF-8 without BOM。
为了方便观察编码,而不是用其他文本软件来查看,我预先下载了一个插件FileEncoding
,它会在右下角显示当前文件的编码。
方案一
下载插件解决编码问题
据说Linux下不识别with BOM的,原本想尝试UTF-8,但force utf-8插件我使用后无效,就只好采用with BOM的方案。
后来使用Format on Save
插件解决了问题,下载好后,在工具-选项
找到该插件,只需要设置两项就行,第一项是考虑到在windows上,所以改了。
然后新建文件后,就可以在右下角看到,是GBK编码,但是保存后,就变成了UTF-8 with BOM。
方案二
使用editorconfig文件,统一代码规范,也可统一编码问题。可以直接由VS生成,自 Visual Studio 2019 起,可以通过“工具” > “选项”>"文本编辑器"基于代码样式设置生成 EditorConfig 文件。
我这里开发是C++,在代码样式里,可以找到基于代码样式设置生成 EditorConfig 文件。
生成后,在该文件中加入
#编码方式,有以下几种类型:latin1, utf-8, utf-8-bom, utf-16be, utf-16le
charset = utf-8-bom
保存即可。对了,别忘了这个文件是需要放到项目路径下的。
补充一点,关于Qt界面乱码,上述可能还不够,只是统一了文件的编码标准。需要在项目属性-C/C+±命令行-其他选项下面加入/utf-8
,这样才就统一了Qt UTF-8编码标准,Qt终端,Ui界面就不会乱码了。
2022-09-04 更新:
若是采用UTF-8,不带BOM方案,那可以参阅这篇文章,详细解释了乱码原因,解决方案。
以上是我目前找到的最佳解决方案。欢迎补充!