QVector<QByteArray>vcFileDatas;
if (reader.isReadable())
{
QVector<QZipReader::FileInfo> vclst = reader.fileInfoList();
for (int i = 0; i < vclst.size(); ++i)
{
QString strPath = vclst[i].filePath;//中文路径
QByteArray filedata = reader.fileData(strPath );
int nfilelength = filedata.length();//在这里发现数据为0
vcFileDatas.push_back(filedata);
}
}
这种错误是由于fileData里面的函数是这样判断的:
for (i = 0; i < d->fileHeaders.size(); ++i)
{
if (QString::fromLocal8Bit(d->fileHeaders.at(i).file_name) == fileName)
break;
}
也就是里面并没判断是否是utf8编码。
为了能正常访问,只能将我们传进去的字符串改为utf8格式就可以了。
QVector<QByteArray>vcFileDatas;
if (reader.isReadable())
{
QVector<QZipReader::FileInfo> vclst = reader.fileInfoList();
for (int i = 0; i < vclst.size(); ++i)
{
QString strPath = vclst[i].filePath;
vcFilePath.push_back(strPath);
//这里由于库的问题,因此需要先转为utf8,再转为local8;
//就是先弄出乱码,以适应里面的规则;
/
//关键代码是这两行,把路径的字符串转换一下就可以了;
QByteArray dt = strPath.toUtf8();
QString strtemp = QString::fromLocal8Bit(dt);
QByteArray filedata = reader.fileData(strtemp);
int nfilelength = filedata.length();
vcFileDatas.push_back(filedata);
}
}