QT乱码问题原因解决方案

这篇博客探讨了在使用Qt时遇到的中文乱码问题,主要集中在MSVC编译器下。问题源于QtCreator的UTF-8编码与MSVC生成GBK2312编码的不一致。解决方法包括使用QStringLiteral()宏或修改编译器设置,确保执行字符集为UTF-8。通过在pro文件或头文件中添加相应选项,可以避免编码冲突导致的乱码现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Qt的时候,时常会遇到中文乱码问题,qDebug打印日志乱码,或者Widget界面乱码等等。

原因大多是因为使用MSVC编译器问题导致,而Qt 自带的MinGW一般不会出现乱码问题。

其核心原因呢,是因为编码问题,Qt Creator保存的文件使用的是UTF-8编码(是任何平台、任何语言都可以使用的跨平台的字符集),MSVC编译器虽然可以正常编译带BOM的UTF-8编码的源文件,但是生成的可执行文件的编码是 Windows 本地字符集,比如 GBK2312。

也就是在可执行文件中,字符串“测试”是以GBK2312编码的,而可执行程序执行到这条语句时,对这个字符串却是以UTF-8解码的,这样就会出现乱码。

一种方法是使用 QStringLiteral()宏或者QString::fromLocal8Bit()封装字符串,另一种方法是强制 MSVC 编译器生成的可执行文件使用UTF-8编码。

方案一
QString str = QStringLiteral(“目标字符串”);

方案二
在pro文件中添加
win32:msvc{
QMAKE_CXXFLAGS += /source-charset:utf-8 /execution-charset:utf-8
}
或者在头文件中添加
#if _MSC_VER >=1600
#pragma execution_character_set(“utf-8”)
#endif

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值