您的位置:首页 > Web前端 > JavaScript

JSONCpp 解析特殊中文特殊字符串是失败!

2013-11-26 18:16 1631 查看
今天,由于项目要求,需要用到JONScpp去解析数据。开始用得很开心,觉得JSONcpp是个好东西,所以很兴奋。但是后面,出现 Json::Reader :parser()调用失败。很好奇,明明json格式很正确,为什么会解析失败?所以很生气,但是没办法只能单步调试了。进去后发现JSONcpp代码有一段代码在解析“忎,忈,朲,芢,朲,銋,姙,鈓,鵀,絍”这样的特殊中文时认为字符串是与"\"开头,然后就直接跳到default放回,代码如下:

bool Reader::decodeString( Token &token, std::string &decoded )
{
decoded.reserve( token.end_ - token.start_ - 2 );
Location current = token.start_ + 1; // skip '"'
Location end = token.end_ - 1;      // do not include '"'
while ( current != end )
{
Char c = *current++;
if ( c == '"' )
break;
else if ( c == '\\' )
{
if ( current == end )
return addError( "Empty escape sequence in string", token, current );
Char escape = *current++;
switch ( escape )
{
case '"': decoded += '"'; break;
case '/': decoded += '/'; break;
case '\\': decoded += '\\'; break;
case 'b': decoded += '\b'; break;
case 'f': decoded += '\f'; break;
case 'n': decoded += '\n'; break;
case 'r': decoded += '\r'; break;
case 't': decoded += '\t'; break;
case 'u':
{
unsigned int unicode;
if ( !decodeUnicodeCodePoint( token, current, end, unicode ) )
return false;
decoded += codePointToUTF8(unicode);
}
break;
default:
return addError( "Bad escape sequence in string", token, current );
}
}
else
{
decoded += c;
}
}
return true;
}


所以解决这个问题只要把return去掉就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: