QT使用MSVC编译器时中文报错问题

BUG

在QT中,如果编译器是MSVC,默认情况下中文可能出现异常!

比如 “名” 这个字:

QString a="名";

qDebug()<<"名";

QMessageBox::information(NULL,"名","");

以上等等操作都会报错无法编译,错误提示:

继续测试发现“名称”、“名医”、“名著” 等正常,“用户名”等不正常;

“名0”、“名1”等可以正常编译,但输出的是乱码;

再继续测试:

QString a="名\n";
qDebug()<<a;

发现输出的结果是:

 

"名\\n"  这显然不是正确的结果!正确的应为:"名\n"

多出的这个反斜杠 \ 应该就是导致报错的原因!

实际上,并不单单是“名”这个字是这样,单个汉字大多有这个情况!

解决方法

方法一:qmake环境,在.pro文件中添加一行:

QMAKE_CXXFLAGS += /source-charset:utf-8 /execution-charset:utf-8

cmake环境,在 CMakeLists.txt文件中添加:

add_compile_options("/source-charset:utf-8" "/execution-charset:utf-8")

方法一:使用Clang编译器或者MinGW编译器(推荐Clang)

方法二:

1、点击 编辑 菜单,选择Select Encoding,如图:

在弹出的对话框中,选择“GBK/CP936/MS936/windows-936”,然后点击“按编码保存”: 

此时编译不会报错了,但中文输出显示的是乱码!

2、在文件头加入一行代码:

#pragma execution_character_set("utf-8")

如图: 

 这样就可以了!

注意:MSVC2010以后的版本才支持!

可以加入判断,写成这样:

#if _MSC_VER >= 1600 // >=MSVC2010

#pragma execution_character_set("utf-8") 

#endif

 附一张MSVC编译器版本对照表:

MSC    1.0   _MSC_VER == 100
MSC    2.0   _MSC_VER == 200
MSC    3.0   _MSC_VER == 300
MSC    4.0   _MSC_VER == 400
MSC    5.0   _MSC_VER == 500
MSC    6.0   _MSC_VER == 600
MSC    7.0   _MSC_VER == 700
MSVC++ 1.0   _MSC_VER == 800
MSVC++ 2.0   _MSC_VER == 900
MSVC++ 4.0   _MSC_VER == 1000 (Developer Studio 4.0)
MSVC++ 4.2   _MSC_VER == 1020 (Developer Studio 4.2)
MSVC++ 5.0   _MSC_VER == 1100 (Visual Studio 97 version 5.0)
MSVC++ 6.0   _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
MSVC++ 7.0   _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
MSVC++ 7.1   _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
MSVC++ 8.0   _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
MSVC++ 9.0   _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
MSVC++ 10.0  _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
MSVC++ 11.0  _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
MSVC++ 12.0  _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
MSVC++ 14.0  _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
MSVC++ 14.1  _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
MSVC++ 14.2  _MSC_VER == 1920 (Visual Studio 2019 Version 16.0)
MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 Version 16.1)
MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 Version 16.2)

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skyyx2002

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值