前言
经常使用Qt5的小伙伴,可能早就注意到了,明明在linux系统下正常使用的源代码,或者win下使用mingw的源代码,一旦源码中有汉字,就无法使用msvc编译器直接编译。
本小节讨论下此问题,并给出解决方案
原因:
linux系统或win系统下的mingw,载入源码中,默认使用的是utf-8编码。
而msvc默认使用的编码,是win系统默认编码。
win系统默认编码,是分地区的,中国大陆是GBK,台湾或香港等地区可能是BG5,其他国家和地区,一般都有自己的编码。所以中文编码,在其他地区会无法正确识别,导致msvc默认无法正常编译程序
解决方案
1.将源码编码修改为本地编码
方法很多,大部分编辑器都可以,只介绍一种,使用QtCreator
Edit-Select Encoding
选择正确的文件编码,并保存
优点:操作简单
缺点:
(1)若文件比较多,工作量比较大
(2)仍然无法做到到其他平台或编译器共享源码
2.将win操作系统的汉字编码修改为utf-8
在控制面板中修改
优点:一次操作即可让msvc识别utf-8
缺点:当前很多软件,仍然使用本地GBK编码,特别是几年前的程序,会造成这些程序显示乱码,无法正常使用
3.指定msvc使用utf-8编码
直接在项目文件中,指定源码编码为uft-8,控制台输出编码为utf-8
若是qmake项目文件,在项目中添加如下代码:
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
若是CMake项目文件,在项目中添加如下代码:
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/execution-charset:utf-8>")
优点:每个项目添加一次就可以,且不影响其他平台编译
缺点:每个项目都需要添加一次
后记
每种方法各有优劣,笔者个人推荐使用第三种解决方案
需要说明的是,qt6中已经通知msvc编译器使用utf-8编码了,就不需要配置了,所以建议小伙伴可以根据需要,尝试下qt6
笔者最近某些事并不是很顺心,为小伙伴们贡献一教程,希望对大家有所帮助