TinyXML 解析 UTF-8 字符串的问题
2016-02-22 08:26
295 查看
TinyXML 在解析 UTF-8 格式的 XML 文件时,如果文件中含有以下两个字符串:“<name>文史经典</name>” 和 “<name>资讯速递</name>” 时,解析失败。
分析代码,发现失败的原因是如下的代码:
tinyxmlparser.cpp 文件中的函数:const char* TiXmlBase::ReadText()
初步分析,是对 UTF-8 字符串的解析问题。
解析使用了如下的表:
此表网上可以 google 到的。为何会解析失败,原因待查。
分析代码,发现失败的原因是如下的代码:
tinyxmlparser.cpp 文件中的函数:const char* TiXmlBase::ReadText()
int len; char cArr[4] = { 0, 0, 0, 0 }; p = GetChar( p, cArr, &len, encoding ); if ( len == 1 ) (*text) += cArr[0]; // more efficient else text->append( cArr, len );
初步分析,是对 UTF-8 字符串的解析问题。
解析使用了如下的表:
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, 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, 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, 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, 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 到的。为何会解析失败,原因待查。
相关文章推荐
- 利用do while循环语句 + while语句 + if语句来进行阶乘计算
- 上周热点回顾(2.15-2.21)
- H264与RTP
- C++ new & delete
- linux rm 命令
- 几个需要学习的点和技术
- java数据类型1
- jQuery遍历对象/数组/集合
- 串口驱动卸载/加载与 GSM 模块电源控制
- 解析 H.264 NAL Unit 帧类型
- H.264 数据示例
- 一个简单的工资管理程序(大二,无界面)
- 同一TextView上内容的不同显示
- spojDistinct Substrings【后缀数组 不重复子串】
- DexExpress skins
- WP学习记录
- hdu 4997 Biconnected
- C++输入两个数,输出两个数之间的整数
- 莞草加工品
- Http报头Accept与Content-Type的差别