Data获取字节数据,组成字符串出错 rapidjson解析出错

版本:cocos2d-x 3.10 语言:C++

 

学习了cocos大概有些时间了,不过还是会出现一些莫名奇妙的错误,在这里就给大家分享分享,第一次写博文,希望大家多多指教。正文中可能会有些啰嗦,可以直接看总结。

 

昨天晚上的时候,我在学习rapidjson相关的解析,突然解析报错,始终在第一步的时候无法解析:

rapidjson::Document document;

document.Parse<0>(content.c_str()); //将JSON数据进行解码,0表示解析标识

CCASSERT(!document.HasParseError(), "Parsing to document failure"); //在这一步报错

 

查阅了一些资料大部分说的是格式的问题,自己也仔细检查过,甚至用最简单的json格式来试验,但是还是出错。

后来我意识到了错误的所在,我用的是Data来获取磁盘上的数据,然后在组成字符串的时候,使用上和例子中有一些区别:

auto file_utils = FileUtils::getInstance(); //获取文件工具

std::string wr_path = file_utils->getWritablePath(); //获取写入路径

 

Data data = file_utils->getDataFromFile(wr_path + filename); //获取数据

content = std::string((const char*)data.getBytes()); //这是我用的方法

log(content.c_str());

 

content = std::string((const char*)data.getBytes(), 0, data.getSize()); //这是书上的方法

log(content.c_str());

 

然后对比一下输出:(上面是我的)

{"ResultCode":0,"Record":[{"ID":"111"}]}������q�}@�

{"ResultCode":0,"Record":[{"ID":"111"}]}

 

在组成字符串的时候没有指定数据大小的话,使用Data获取数据,字符串的后面会出现乱码!

按照书上的正常获取字符串之后,程序就一切正常了。具体什么原因我没有找到,不知道有没有哪位大大解释一下的?

 

总结:

使用Data来获取字符串的时候一定要指定长度,以std::string((const char*)data.getBytes(), 0, data.getSize());来组成字符串,后面的0, data.getSize()一定不能不写,否则字符串的后面出现乱码。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值