乱码原因
当MSVC编译器编译程序的时候,会分析源文件采用何种编码,有BOM标识符则可以正确识别其编码,若没有BOM标识符则认为其使用本地字符编码local字符集。编译器分析出源文件字符编码之后,会进行解码再编码,将源字符集转码成执行字符集。
我们使用的windows系统本地字符编码为GBK编码。
Qt中QString内部采用unicode字符集,utf-16编码。构造函数QString::QString(const char *str) 默认使用 fromUtf8() 将str所指的执行字符集从 utf-8 转码成 utf-16。
显示中文乱码的原因其实就QString转码方式与执行字符集不一致。
(源字符集为本地字符集GBK编码,QString以utf-8的方式进行解码,会导致获得错误的二进制编码,再将错误二进制转为utf-16就会出现乱码。)
解决办法
网上解决这个问题的方法很多,但我觉得比较繁琐而且部分方法还会出现失效的情况。
记录VS中一个比较好用的插件,可以一次性彻底解决这个问题。