最近使用QT5.13+VC2015遇到编译错误,和中文乱码问题
实验过程:
1.如果编码是utf-8无bom,在pro中的添加的是
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
则编译通过,且运行时中文正常
2.如果编码是utf-8+bom, 在pro中添加,
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
在包含中文的源文件加#pragma execution_character_set(“utf-8”)
则编译能通过, 执行也无乱码(采用的方案:中文的文件+bom,使用该指令)
综上所述:
在用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