`

QT5.13+VC2015彻底解决编译错误和中文乱码问题

    博客分类:
  • QT
qt 
阅读更多

最近使用QT5.13+VC2015遇到编译错误,和中文乱码问题

 

网上搜了很多方法, 没发现彻底解决的,  

有的人说转换文本编码 , 跨平台再转回去? 这要怎么发布?

还有的说一个个添加#pragma指令, 文件一多改来改去咋办,这不现实


遂做了很多实验最终解决,分享给小伙伴们.

 

这个问题只是在用vc编译时才有, 用minGW是没有,  为何要用vc?


因为vc支持WebEngine

 


linux下是没有utf-8的bom头的, 因为utf8没有字节序问题,也就不需要bom头,并且这样可以兼容ASCii码 ,
而vc默认是使用当前系统的编码(local code == GBK), 它和UTF8就冲突了, 
因此, 要多一个所谓的BOM头来识别UTF8,不然vc还以为它是gbk呢

 

实验过程:

1.如果编码是utf-8无bom, 在pro中的添加的是
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
则编译通过, 运行时界面乱码

此时若中文字符串用u8修饰,
QObject::tr(u8"label:我是个窗口")
则编译通,运行没有乱码!

 

2.如果编码是utf-8无bom,在pro中的添加的是
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
则没有效果, 编译错误, C2001; C2146 ; C2143
此时若中文字符串用u8修饰,
QObject::tr(u8"label:我是个窗口")
依然编译错误!

 

3.如果编码是utf-8无bom,在pro中的添加的是
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
则编译通过,且运行时中文正常

 

4.如果编码是utf-8无bom, pro无添加,用u8修饰没效果,编译错误

 

5.如果编码是utf-8+bom, 在pro中无添加
则编译能通过,但运行时中文乱码


6.如果编码是utf-8+bom, 在pro中无添加, 
但中文字符用u8前缀修饰,QObject::tr(u8"label:我是个窗口")
则编译能通过,运行中文没有乱码.ok
u8虽然起到了效果, 但只能局部使用, 文件太多的话就很难一个个修改了.

 

7.如果编码是utf-8+bom, 在pro中添加, 
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
则编译能通过,但运行时中文乱码
这个就等于是第5条, 既然有bom那么vc能识别出这个源文件是utf8, 

所以在pro再重复指定一次是多余的,并没有指定执行字符集.

 

7.如果编码是utf-8+bom, 在pro中添加, 
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
则编译能通过, 执行也无乱码

 

综上所述:
在用vc编译器时对于没有bom头的utf-8文本编译出错,只要源文件中对字符串加utf8修饰是没用的(修饰符就是u8""形式),
网上有说在源文件加#pragma execution_character_set("utf-8")有用吗?
明显是没用的,编译都通不过,还怎么执行.

msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8  这条是让程序执行时使用utf-8字符集
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8     这条是告诉vc编译器识别源文件编码类型是utf-8
u8修饰符是让程序执行时使用utf-8字符集(显然这种方法只适合少量文本修改,不通用,兼容性差)

 

总结:

推荐在pro中添加以下3条指令,不管带不带bom都能解决常见的编码问题
即彻底解决C4819警告,C2001错误而不需要转换编码,不需要修改源码!!!


msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
QMAKE_CXXFLAGS_WARN_ON += -wd4819

0
2
分享到:
评论

相关推荐

    QT5.14.2+MSVC2015.docx

    在编译过程中可能会遇到各种问题,其中一个常见的问题是由于VS2015安装不完全导致的编译错误。为了解决这个问题,可以尝试重新检查VS2015的安装是否完整,尤其是确保已经安装了所有必要的组件和更新包。 此外,在...

    QT4.3.3+VC6.0安装编译教程

    本教程旨在详细介绍如何在Windows环境下使用QT4.3.3与VC6.0进行项目的安装与编译,主要关注于两种部署方式:静态编译与动态编译,并重点介绍静态编译的方法及过程中可能遇到的问题及其解决方案。 #### 二、环境配置...

    window qtcreator + gcc +openocd 编译调试stm32

    windows 上用qtcreator + gcc +openocd 编译调试stm32 windows 上用qtcreator + gcc +openocd 编译调试stm32 windows 上用qtcreator + gcc +openocd 编译调试stm32 windows 上用qtcreator + gcc +openocd 编译调试...

    QT5.13 MySQl驱动

    根据QT5.13生成的MySQl数据库驱动,生成环境是win1064位+QT5.13+MySQL5.5,下载前请提前确认好版本信息,直接将驱动放到QT的安装目录的sqldriver目录下即可(例如:C:\Qt\Qt5.13.0\5.13.0\mingw73_64\plugins\...

    Tcp通信(基于QT5.13 + TCP + 服务端 + 客户端)

    在本文中,我们将深入探讨如何使用QT5.13.0框架实现TCP通信,包括创建一个服务端和客户端,以及如何使多个客户端与一个服务端进行有效通信。首先,我们来了解一下TCP(传输控制协议)的基本概念。 TCP是一种面向...

    win10+Qt5.15.2+VS2019_64编译mysql8.0生成的驱动插件

    在本文中,我们将深入探讨如何在Windows 10操作系统上,使用Qt 5.15.2和Visual Studio 2019 64位版本编译MySQL 8.0驱动,以便为Qt应用程序创建所需的数据库连接插件。这个过程对于开发依赖于MySQL数据库的Qt应用至关...

    搭建arm环境+uboot+内核编译+Qt编译+文件系统制作

    ### 搭建 ARM 环境 + U-Boot + 内核编译 + Qt 编译 + 文件系统制作 #### 一、安装交叉编译工具 为了搭建一个完整的 ARM 开发环境,首先需要安装交叉编译工具。交叉编译是指在一个平台上编译出另一个平台可以运行的...

    qt乱码问题解决

    qt乱码问题解决

    Qt5.13静态编译及VS2019开发环境配置.pdf

    最新版Qt5.13静态库编译方法详细图文说明, 以及演示在VS2019下配置和使用Qt5.13静态库的方法。使用Qt5.13静态库编译后的可执行程序,不需依赖大量的dll文件,一个执行文件即可到处运行。

    QT5.13连接Oracle11的驱动和依赖(32位).rar

    QT5.13连接Oracle11的驱动和依赖(32位).rar这个压缩包文件包含了一系列资源,主要用于在32位系统上使用QT5.13版本的开发环境与Oracle 11g数据库进行交互。以下是相关知识点的详细说明: 1. **QT框架**: QT是一...

    QT+VC6.0安装编译过程

    QT+VC6.0安装编译过程是将Qt框架与Visual C++ 6.0集成,以便在Windows平台上开发基于Qt的应用程序。这个过程涉及到多个步骤,包括安装Qt库、配置开发环境、编译Qt源代码以及创建项目工程。下面我们将详细讲解这个...

    第一个 DCMTK 程序:显示 DICOM 图像(DCMTK 3.6.4 + Qt 5.14.2 + VS2015)源码

    这是博文《第一个 DCMTK 程序:显示 DICOM 图像(DCMTK 3.6.4 + Qt 5.14.2 + VS2015)》的源码,详细内容见博客文章 https://blog.csdn.net/blackwoodcliff/article/details/109481195

    opencv4.2的QT5.12 Mingw_build版本编译好的

    OpenCV(Open Source Computer Vision ...总之,这个压缩包为在Windows上使用Qt 5.12和MinGW开发基于OpenCV的项目提供了极大的便利,减少了配置和编译的时间成本,让开发者可以更专注于应用程序的逻辑和功能实现。

    Qt5.7+Vs2015编译QtAV

    在本文中,我们将深入探讨如何在Windows 10环境下,使用Qt5.7和Visual Studio 2015(Vs2015)编译QtAV项目。QtAV是一款基于Qt框架的多媒体播放器,它集成了FFmpeg库,提供强大的音频和视频处理功能。下面我们将分...

    QT5.7.1+VS2015+CEF3 64位

    10. **错误处理与调试**: 开发过程中,可能会遇到如崩溃、内存泄漏等问题,需要利用Qt和CEF提供的调试工具进行排查,如CEF的logging机制和Qt的调试输出。 总之,"QT5.7.1+VS2015+CEF3 64位"项目旨在帮助开发者构建...

    VTK8.2.0+QT5+VS2015 x86/x64 已编译第三方库以其测试DEMO

    VTK8.2.0+QT5+VS2015 x86/x64 已编译第三方库以其测试DEMO

    VTK8.0.0 编译好的库 : Qt5.9 + VS2015 + pcl1.8.1 + vtk8.0

    对应的版本: Qt5.9 + VS2015 + pcl1.8.1 + vtk8.0, PCL库版本和VS VTK版本无比对应。参考其他博客试错了将近一周,各种Bug不断,终于搞好了。 https://blog.csdn.net/rayso9898/article/details/113000822

    Qt5.13 配置mysql数据库驱动.pdf

    在了解如何在Windows10和Ubuntu18系统下为Qt5配置mysql数据库驱动之前,我们需要明确...此外,实际操作中可能会因为细节问题遇到一些阻碍,如路径配置错误、环境变量未正确设置等,这需要在实际操作中注意调试和解决。

Global site tag (gtag.js) - Google Analytics