Qt工作筆記-QXmlStreamReader中的字元編碼的坑
阿新 • • 發佈:2019-01-26
以本人這篇博文的原始碼為例:
原始碼改成如下所示:
#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的格式儲存