各位大虾,小弟初学qt ,正在尝试用qt解析XML文件,文件是utf8编码的,有中文字符。
在遍历的时候,打印出所有的内容,碰到的问题: 不能打印出中文字符。我用的是sax方式,另外qt版本比较低
是3.3版本的,还不能升级,因为平台是固定的定制版的turbolinux。
代码如下:
头文件
class QXmlAttributes;
class QXmlParseException;
class SaxHandlerParseGrases : public QXmlDefaultHandler
{
public:
SaxHandlerParseGrases(void);
~SaxHandlerParseGrases(void);
bool startElement(const QString &namespaceURI,
const QString &localName,
const QString &qName,
const QXmlAttributes &attribs);
bool endElement(const QString &namespaceURI,
const QString &localName,
const QString &qName);
bool characters(const QString &str);
bool fatalError(const QXmlParseException &exception);
private:
QString currentText;
};
bool XmlParseGradeTabInfo(QString &gradesFileName, GRADE_TAB_INFO *tabInfo);
实现文件
#include <stdio.h>
#include <qdom.h>
#include <qxml.h>
#include <qapplication.h>
#include <qfile.h>
SaxHandlerParseGrases::SaxHandlerParseGrases(void)
{
currentText = "";
}
SaxHandlerParseGrases::~SaxHandlerParseGrases(void)
{
}
bool SaxHandlerParseGrases::startElement(const QString &,
const QString &,
const QString &qName,
const QXmlAttributes &attribs)
{
int index = 0;
int i = 0;
if (qName == "Group")
{
printf("-= %s %s \n",tabInfo->GroupInfo[index].Id.data()
,tabInfo->GroupInfo[index].Name.data());
}
else if (qName == "Grade")
{
currentText = "";
printf("Grade %d %s %s %s \n",tabInfo->GroupNb,
attribs.value("Code").data(),
attribs.value("Name").data(),
attribs.value("Alias").data());
}
return true;
}
bool SaxHandlerParseGrases::characters(const QString &str)
{
currentText += str;
return true;
}
bool SaxHandlerParseGrases::endElement(const QString &,
const QString &,
const QString &qName)
{
int index = 0;
if (qName == "Group")
{
printf("++ \n");
}
else if (qName == "Grade")
{
currentText = "";
}
return true;
}
bool SaxHandlerParseGrases::fatalError(const QXmlParseException &exception)
{
return false;
}
int main(int argc, char** argv)
{
QString grades = "Grades.xml";
XmlParseGradeTabInfo(grades, &GradeTabInfo);
return 0;
}