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