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格式的文件编译后出现中文乱码的问题了。

相关推荐

  1. WindowsQt使用MSVC编译出现需要转为unicode提示

    2023-12-30 10:32:03       34 阅读
  2. [字符编码]windwos使用libiconv转换编码格式(二)

    2023-12-30 10:32:03       47 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-30 10:32:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-30 10:32:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-30 10:32:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-30 10:32:03       18 阅读

热门阅读

  1. Vue - 事件处理详解

    2023-12-30 10:32:03       36 阅读
  2. Docker搭建kafka集群

    2023-12-30 10:32:03       28 阅读
  3. 如何在Vue.js中使用$emit进行组件通信

    2023-12-30 10:32:03       35 阅读
  4. leetcode贪心(最大子序列和、分发饼干、摆动序列)

    2023-12-30 10:32:03       31 阅读
  5. uboot学习及内核更换_incomplete

    2023-12-30 10:32:03       50 阅读
  6. 【小白专用】c# 如何获取项目的根目录

    2023-12-30 10:32:03       40 阅读
  7. Unity应该如何学

    2023-12-30 10:32:03       35 阅读
  8. uniapp学习之路

    2023-12-30 10:32:03       36 阅读