tinyxml 读取内含中文的xml打印是乱码问题
下载的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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
代码里的xml内容正确,文件里xml内容异常,那应该就是代码和文件的编码不一致咯
把读出来的内容转成gbk试一下