首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

写下中文到QFile会乱码

2013-04-02 
写入中文到QFile会乱码直接将测试写入文本中 打开文本后发现是 乱码 难道不能直接双引号 只能QString包

写入中文到QFile会乱码
直接将"测试"写入文本中 打开文本后发现是 乱码 难道不能直接双引号 只能QString包含字符 或者tr等等 qDebug()输出来也都是正常显示的中文 但是直接双引号写入文本中为什么会乱码呢 
下面是部分代码

    QApplication a(argc, argv);

    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);

    QFile dstFile("c:/123.txt");
    if (!dstFile.open(QFile::WriteOnly | QIODevice::Truncate | QFile::Text))
    {
        return 1;
    }
    QTextStream out(&dstFile);
    out <<QString("测试").toUtf8()<<QString("测试")<<QObject::tr("测试")<<"测试";
    dstFile.close();
    qDebug()<<QString("测试").toUtf8()<<QString("测试")<<QObject::tr("测试")<<"测试";
[解决办法]
下一个Notepad++,用UTF-8打开文本,再看看。
[解决办法]
我猜测楼主是在windows下写的代码吧。
你的编辑器里面的编码方式默认是GB2312,所以用双引号括起来的常量字符串是以GB2312编码的,而你的代码:
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
让你的QString编码变成了UTF8,所以写入文件后txt在识别编码的时候识别成了UTF8,导致最后两个以GB2312的编码的乱码。

解决方法:
改成
QTextCodec *codec = QTextCodec::codecForName("GB2312");
或者:
QTextCodec *codec = QTextCodec::codecForLocale();

扩展:
楼主可以用二级制文件查看的方式查看你生成的文件,前面的字符都是 1110xxxx  10xxxxxx 10xxxxxx (以E)表示一个汉字,最后俩汉字是>127char + >127的char两个字节表示已个中文字符。

楼主还可以试试新建一个txt在里面写上“联通”,然后保存,再重新打开,乱码了?为什么呢,微软的txt阅读器也是猜测的编码,会猜错的哦

热点排行