Windows下Qt使用MSVC编译出现需要转为unicode的提示

参考 Qt5中文编码问题解决办法_qt5设置编码-CSDN博客 致敬

提示:warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。

出现此问题,应该是Unix格式下代码的编码格式是UTF-8,注意不是UTF-8-BOM。Unix和WIndows的编译器对文档格式的处理方式差异造成的。说白了,其实就是“微软”出品的会把UTF-8 无BOM格式当为GBK处理,也就是不认识UTF-8编码,但能处理GBK和UTF-8-BOM格式。标准上其实没有所谓的UTF-8-BOM,只是微软这样区分了,反而是不支持真正的UTF-8编码格式了。

MSVC和GCC在默认处理编码字符集和执行字符集时有差异,导致相同的代码在不同编译器下可能会出现乱码。

只要在不同的编译器下,源码字符集、执行字符集都统一为UTF-8,就能解决乱码的问题。

1、MSVC
MSVC的编码字符集和执行字符集默认都是GBK,想把MSVC的编码字符集和执行字符集都修改为UTF-8,并不容易。

1.1、源码字符集
默认情况下,MSVC编译时,只有“UFT-8 with BOM”格式的文件会被认为是UTF-8,而“UTF-8 without BOM”和其他格式都会被认为是GBK。

对于MSVC2015以后的版本,如果源文件是UTF-8 without BOM,不是UFT-8 with BOM,还想让MSVC把源码当做UTF-8处理,可以专门告诉编译器源码文件是UTF-8格式,编译时增加命令“/source-charset:utf-8”。

对于MSVC2015之前的版本,这个命令不一定生效,源文件保存成UTF-8 without BOM格式就会出问题,需要注意。

1.2、执行字符集
默认情况下,MSVC在编译时,无论cpp文件源码字符集是UTF-8 without BOM、UTF-8 with BOM、GBK 中的哪一种,只要没有告诉编译器执行码字符集是UFT-8,则最终在内存中,都会被强制转换GBK处理。

想让MSVC执行字符集为UTF-8,必须对源文件增加执行字符集的声明或编译时增加命令。

声明的方式是在每个源码文件的开头增加该内容:#pragma execution_character_set("utf-8")。

编译时增加的命令是“/execution-charset:utf-8”。

而本人所涉及的项目中文件的编码格式各种各样,GBK、ANSI、UTF-8、UTF-8-BOM都有,为了统一,采用了统一转为UTF-8-BOM的方式在Windows下编译了,应该转成GBK也行。

因为涉及的文件很多,需要批量转,于是研究了转换方法:参考 Notepad++批量更改文件编码格式及文档格式-CSDN博客

本人也试过在Qt的.pro中加入msvc:QMAKE_CXXFLAGS += /utf-8编译选项,但因为文件格式不统一,加了这个会导致GBK格式的文件编译后出现中文乱码的问题了。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Qt 5.14 是一种跨平台的应用开发框架,而MSVC是微软的C++编译器。静态编译是指将应用程序所需的所有依赖库和资源都编译打包到可执行文件,这样可以避免运行时的依赖问题。 要在Qt 5.14进行MSVC静态编译,首先需要使用Qt installer安装Qt CreatorMSVC编译器。安装过程需要选择MSVC编译器,并确保安装了相应版本的Windows SDK和MSVC工具集。 在Qt Creator,创建一个新的Qt项目,并在项目配置选择MSVC编译器作为目标。然后,在项目设置,将构建类型设置为Release,并启用静态构建。 接下来,需要在.pro文件进行配置。添加以下行来启用静态编译: ```cpp CONFIG += static ``` 然后,重新构建项目。在构建过程Qt将自动查找和链接静态版本的Qt库。如果一切顺利,最终构建将生成一个静态编译的可执行文件。你可以将此可执行文件在其他计算机上运行,而无需安装Qt运行时库。 需要注意的是,静态编译可能会导致生成的可执行文件变得较大,因为所有依赖库都被包含在内。另外,静态编译还可能会导致一些在动态链接时出现的问题,如无法加载某些插件或动态链接库。 因此,在进行静态编译之前,需要仔细考虑项目的需求和限制。如果项目需要在不同的操作系统上运行,可能需要进行更多的配置和测试,以确保静态编译的可移植性和稳定性。 ### 回答2: Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的工具和库,使程序开发变得更加简单和高效。Qt提供了多种编译选项,包括静态编译和动态编译。静态编译是将程序所需的所有库和依赖项都包含在最终的可执行文件,这样可以避免在运行时需要外部的库文件Qt5.14是Qt框架的一个版本,而MSVC是微软的编译器。要实现Qt5.14的静态编译需要MSVC进行相应的配置和操作。 首先,需要Qt官方网站下载和安装Qt5.14的静态版本。在安装过程需要选择静态编译选项,并确保已经选择了MSVC作为所需的编译器。 安装完成后,打开Qt Creator。在项目的.pro文件,添加以下行来设置静态编译选项:CONFIG += static 然后,使用Qt Creator打开项目文件。在项目设置,选择正确的编译器和构建套件,并确保使用的是静态版本的Qt库。 在项目构建过程Qt会自动处理静态编译的细节,并将所有需要的库和依赖项链接到可执行文件。 完成上述步骤后,重新构建项目,即可得到一个静态编译的可执行文件。这个可执行文件可以在没有安装Qt运行时环境的计算机上运行,因为所有的库和依赖项都已经包含在其。 静态编译可以很好地解决在不同计算机上运行程序时缺少库文件的问题,但它也会使可执行文件的体积变得更大。因此,在进行静态编译时,需要权衡文件大小和运行环境的适用性。 总而言之,通过正确配置Qt5.14和MSVC,可以实现静态编译。这样可以确保程序的可移植性和运行环境的一致性,但同时也需要考虑文件大小和运行效率的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

潇潇独行侠

如果有帮助到您,可以请杯快乐水

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

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

打赏作者

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

抵扣说明:

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

余额充值