• 4095阅读
  • 1回复

求助:qt xml utf8编码解析问题 [复制链接]

上一主题 下一主题
离线xuelang_6561
 
只看楼主 倒序阅读 楼主  发表于: 2012-08-24
各位大虾,小弟初学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;


}

离线xuelang_6561
只看该作者 1楼 发表于: 2012-08-28
大侠们,该出手就出手吧。。。。
快速回复
限100 字节
 
上一个 下一个