什么是网站html静态化,苏州公司名称查询,qq是哪家公司开发的,广州番禺职业技术学院参考 Qt5中文编码问题解决办法_qt5设置编码-CSDN博客 致敬
提示#xff1a;warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。
出现此问题#xff0c;应该是Unix格式下代码的编码格式是UTF-8#xff0c;注意不…参考 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格式的文件编译后出现中文乱码的问题了。