1. 程式人生 > >Qt工作筆記-QXmlStreamReader中的字元編碼的坑

Qt工作筆記-QXmlStreamReader中的字元編碼的坑

以本人這篇博文的原始碼為例:

原始碼改成如下所示:

#include <QApplication>
#include <QDebug>
#include <QFile>
#include <QVector>
#include <QXmlStreamReader>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFile file("C:\\Users\\Administrator\\Desktop\\DrawPic\\1.dat");
    if(!file.open(QFile::ReadOnly|QFile::Text)){
        qDebug()<<"讀取XML檔案時,檔案開啟失敗";
        return false;
    }
    QXmlStreamReader reader;
    reader.setDevice(&file);


    while(!reader.atEnd()){
        reader.readNext();
        qDebug()<<reader.text();
    }

    file.close();

    return a.exec();
}

xml檔案就是這樣的

<test>
	<data1>
		<name1>你妹</name1>
		<name2>你妹妹</name2>
		<name3>你妹妹妹</name3>
		<name4>你妹妹妹妹</name4>
		<name5>你妹妹妹妹妹</name5>
		<double>3.1415</double>
		<int1>10</int1>
		<attribution include="100">
			<int3>1000</int3>
		</attribution>
	</data1>
	
	<data2>
		<name1>你姐</name1>
		<name2>你姐姐</name2>
		<name3>你姐姐姐</name3>
		<name4>你姐姐姐姐</name4>
		<name5>你姐姐姐姐姐</name5>
		<double>6.6666</double>
		<int1>66</int1>
		<attribution include="666">
			<int3>66666</int3>
		</attribution>
	</data2>
</test>

把這個編碼改成ANSI編碼儲存,如下圖所示:

<?xml   version="1.0"   encoding="GBK"?>

這一行是去掉了的,

此時是讀不了資料的,因為Qt Creator 預設採用UTF-8編碼,而setCodec這個函式在QXmlStreamReader中並沒有,所有讀不了。

對於這個坑有以下幾個方法:

1.修改程式字元編碼;

2.加上encoding,讓QXmlStreamReader知道應該採用咋樣的編碼;

3.儲存檔案的時候,採用UTF-8的格式儲存