16,223
社区成员
发帖
与我相关
我的任务
分享
QTextStream::setGenerateByteOrderMark(bool generate);
把这个属性设置为true,在使用utf字符集的时候,QTextStream默认写入BOM到文件最开始处,注意:QTextStream默认使用QTextCodec::codecForLocale()作为字符集。
----乱码问题
MSVC的运行字符集为ANSI,对于简体中文的系统来说就是:代码页-936,也就是gbk。楼主乱码的原因就是MSVC在运行的时候把utf8的字符串当作gbk来解析了,自然是乱码。解决这个问题有2个参考办法:
1、把cpp编码改为gbk,这样文件编码就和MSVC的运行字符集对应:
QTextCodec::setCodecForLocale(QTextCodec::codecForName("gbk"));
qDebug() << QString::fromLocal8Bit("中文");
2、把cpp编码改为utf8-bom,之所以带bom,是因为cl只能识别带bom的utf8 cpp,然后在每个文件的开始加上:#pragma execution_character_set("utf-8"),把运行字符集改为utf8,注意用这个命令VS2010要打sp补丁,2010之前版本不支持。
qDebug() << QString::fromUtf8("中文");
或者直接:
qDebug() << QString("中文");
因为Qt5的QString(const char *)默认用fromUtf8来转换。