当前位置: 首页 > news >正文

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

BUG

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

比如 “名” 这个字:

QString a="名";

qDebug()<<"名";

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

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

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

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

再继续测试:

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

发现输出的结果是:

 

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

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

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

解决方法

方法一:使用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)

相关文章:

  • Java Double toString()方法具有什么功能呢?
  • 猿创征文|Spring Boot日志
  • Blue Prism 异常处理
  • PCL 环境下安装配置CGAL 5.5
  • Code For Better 谷歌开发者之声——盘点大家用过的Google 产品
  • Android基本界面控件、部分属性方法解析
  • Qt5开发从入门到精通——第六篇二节( 图像与图片——基础图形的绘制 )
  • Hive学习笔记2
  • 【zabbix监控四】zabbix之监控tomcat服务报警案例
  • JavaScript endsWith() 方法
  • 软件测试(用例2)
  • C++11重写muduo网络库——预备知识
  • frp内网穿透—将kali代理在公网中进行渗透测试
  • charles + proxifier 抓包配置(踩坑记录)
  • 【分享】MySQL安装、配置环境、创建数据库的方法
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Intervention/image 图片处理扩展包的安装和使用
  • JAVA并发编程--1.基础概念
  • MYSQL 的 IF 函数
  • PAT A1092
  • Python_OOP
  • 从零开始的无人驾驶 1
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 简单实现一个textarea自适应高度
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 数据结构java版之冒泡排序及优化
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • #DBA杂记1
  • (12)目标检测_SSD基于pytorch搭建代码
  • (4.10~4.16)
  • (Note)C++中的继承方式
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二)学习JVM —— 垃圾回收机制
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (七)c52学习之旅-中断
  • (一)u-boot-nand.bin的下载
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转载)Linux网络编程入门
  • .describe() python_Python-Win32com-Excel
  • .gitattributes 文件
  • .Net Remoting常用部署结构
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @拔赤:Web前端开发十日谈
  • [ C++ ] STL_list 使用及其模拟实现
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [CareerCup] 14.5 Object Reflection 对象反射
  • [codevs1288] 埃及分数
  • [echarts] y轴不显示0
  • [flask]http请求//获取请求头信息+客户端信息
  • [iOS开发]事件处理与响应者链