码迷,mamicode.com
首页 > 其他好文 > 详细

TinyXML 解析 UTF-8 字符串的问题

时间:2016-02-22 09:03:06      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

TinyXML 在解析 UTF-8 格式的 XML 文件时,如果文件中含有以下两个字符串:“<name>文史经典</name>” 和 “<name>资讯速递</name>” 时,解析失败。

 

分析代码,发现失败的原因是如下的代码:

tinyxmlparser.cpp 文件中的函数:const char* TiXmlBase::ReadText()

1 int len;  
2 char cArr[4] = { 0, 0, 0, 0 };  
3 p = GetChar( p, cArr, &len, encoding );  
4 if ( len == 1 )  
5     (*text) += cArr[0]; // more efficient  
6 else  
7     text->append( cArr, len );  

初步分析,是对 UTF-8 字符串的解析问题。

 

解析使用了如下的表:

1 const int TiXmlBase::utf8ByteTable[256] = {// 0 1 2 3 4 5 6 7 8 9 a b c d e f1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x001, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2  1, 1, 1, 1, // 0x101, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x201, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x301, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x401, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x501, 1, 1, 1, 1, 1,
3  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x601, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x70 End of ASCII range1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80 0x80 to 0xc1 invalid1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90 1, 1, 1, 1, 1,
4  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0 0xc2 to 0xdf 2 byte2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd03, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5  3, 3, 3, 3, 3, 3, // 0xe0 0xe0 to 0xef 3 byte4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // 0xf0 0xf0 to 0xf4 4 byte, 0xf5 and higher invalid};

此表网上可以 google 到的。为何会解析失败,原因待查。

TinyXML 解析 UTF-8 字符串的问题

标签:

原文地址:http://www.cnblogs.com/91program/p/5206053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!