目的
前一段时间对加密json文件进行解读,然后将数据结果显示出来,出现了如下
- Unterminated string
- illegal value
这两种类型错误,主要是因为要将MFC下的移植到Qt下,改用新框架。原先采用的CFile, CString,分别改为QFile, QString, QByteArray。
Unterminated string
解析json文件时候出现如下Unterminated string,无终结的字符串,然后当时傻呵呵的添加了个"\0",然后发现仍然不对。
通过对比发现读文件内容没问题,在于我设置转化过程中把大小的值缩短了导致只有部分的值进行了解析出现了未终结的字符串。
//dataByte QByteArray
//stdJson std::string
dataByte = file.readAll();
// 第1种方式
stdJson = std::string(dataByte.constData);
//第二种方式
stdJson = dataByte.toStdString();
stdJson = decodeFile(stdJson, keys);
第一种方式 : stdJson size 只有 674 dataByte.constData是一个const char* 指针 导致内容size的变小;
第二种方式 : stdJson size 只有 32万多 与dataByte size差不多;
illegal value
这个问题 就有点尴尬了, 我网上搜了一些 也没有怎么理解,当时还怀疑json文件是否问题,但是发现老版的读写没问题。然后我重新梳理思路,
读文件大致分为三部:
- 按照某个模式(读或写)打开文件 open
- 给对应的数据结构分配足够的内存
- 然后read
对比老版,发现open模式可能不对,
file.open(QIODevice::ReadOnly | QIODevice:: Text);
//后改为
file.open(QIODevice::ReadOnly);
原因:
因为我那加密文件是json类型,所以用Text 打开进行读时会按照Text模式进行读,导致读出来数据会有问题。