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

时间:2023-01-11 19:00:03

版本: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()一定不能不写,否则字符串的后面出现乱码。