tinyxml 读取内含中文的xml打印是乱码问题

发布于 2022-09-03 00:07:06 字数 4162 浏览 24 评论 0

下载的tinyxml.去解析内含中文的xml文件。
发现:
1:以读buffer的方式读取xml内容,中文是可以正确被识别打印到控制台的。
测试代码:

  string xmlString = 
            "<Class name=\"计算机软件班\">\
              <Students>\
                <student name=\"张三\" studentNo=\"13031001\" sex=\"男\" age=\"22\">\
                  <phone>88208888</phone>\
                  <address>西安市太白南路二号</address>\
                </student>\
                <student name=\"李四\" studentNo=\"13031002\" sex=\"男\" age=\"20\">\
                  <phone>88206666</phone>\
                  <address>西安市光华路</address>\
                </student>\
              </Students>\
            </Class>";
 
    TiXmlDocument* myDocument = new TiXmlDocument();
    myDocument->Parse(xmlString.c_str());
 
    TiXmlElement* rootElement = myDocument->RootElement();  //Class
    TiXmlElement* studentsElement = rootElement->FirstChildElement();  //Students
    TiXmlElement* studentElement = studentsElement->FirstChildElement();  //Student
 
    while ( studentElement ) 
    {
        TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute();  //获得student的name属性
        while ( attributeOfStudent ) 
        {
            cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << endl;
            attributeOfStudent = attributeOfStudent->Next();
        }
        TiXmlElement* phoneElement = studentElement->FirstChildElement();//获得student的phone元素
        const char *phone = phoneElement ->GetText();
        cout << "phone" << " : " << phone << endl;
 
        TiXmlElement* addressElement = phoneElement->NextSiblingElement();
        string address = addressElement->GetText();
        cout << "address" << " : " << address << endl;
 
        studentElement = studentElement->NextSiblingElement();
        cout<<endl;
    }
    return 0;

name : 张三
studentNo : 13031001
sex : 男
age : 22
phone : 88208888
address : 西安市太白南路二号

name : 李四
studentNo : 13031002
sex : 男
age : 20
phone : 88206666
address : 西安市光华路

请按任意键继续. . .

2:以读取文件的方式,打开一个xml文件去解析,就打印异常了

测试代码:

const char* filepath = "utf8test.xml";  
    TiXmlDocument doc(filepath);  
    bool loadOkay = doc.LoadFile(TIXML_DEFAULT_ENCODING);  
    // faile to load 'phonebookdata.xml'.  
    if (!loadOkay) {      
        printf( "Could not load test file %s. Error='%s'. Exiting.\n", filepath,doc.ErrorDesc() );  
        exit( 1 );  
    }  

     TiXmlElement* rootElement = doc.RootElement();  //Class
    TiXmlElement* studentsElement = rootElement->FirstChildElement();  //Students
    TiXmlElement* studentElement = studentsElement->FirstChildElement();  //Student
 
    while ( studentElement ) 
    {
        TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute();  //获得student的name属性
        while ( attributeOfStudent ) 
        {
            cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << endl;
            attributeOfStudent = attributeOfStudent->Next();
        }
        TiXmlElement* phoneElement = studentElement->FirstChildElement();//获得student的phone元素
        const char *phone = phoneElement ->GetText();
        cout << "phone" << " : " << phone << endl;
 
        TiXmlElement* addressElement = phoneElement->NextSiblingElement();
        string address = addressElement->GetText();
        cout << "address" << " : " << address << endl;
 
        studentElement = studentElement->NextSiblingElement();
        cout<<endl;
    }

屏幕显示:
name : 鈥滃紶涓夆€
studentNo : 鈥?3031001鈥
sex : 鈥滅敺鈥
age : 鈥?2鈥
phone : 88208888
address : 瑗垮畨甯傚お鐧藉崡璺簩鍙

name : 鈥滄潕鍥涒€
studentNo : 鈥?3031002鈥
sex : 鈥滅敺鈥
age : 鈥?0鈥
phone : 88206666
address : 瑗垮畨甯傚厜鍗庤矾

请按任意键继续. . .

我xml文件的编码方式为:UTF-8

大家有知道的吗,求救。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初雪 2022-09-10 00:07:06

代码里的xml内容正确,文件里xml内容异常,那应该就是代码和文件的编码不一致咯
把读出来的内容转成gbk试一下

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文