关于Quazip解压中文乱码问题的解决
quazip是用Qt封装zlib的跨平台开源解压缩库,支持windows, linux、android平台(mac平台未测试,穷的买不起mac);官方源码地址: https://sourceforge.net/projects/quazip/大神关于quazip使用说明:http://blog.csdn.net/liang19890820/article/details/5
quazip是用Qt封装zlib的跨平台开源解压缩库,支持windows, linux、android平台(mac平台未测试,穷的买不起mac);
官方源码地址: https://sourceforge.net/projects/quazip/
大神关于quazip使用说明:http://blog.csdn.net/liang19890820/article/details/50636181
本文内容:
1,问题场景:解压含有中文名文件的压缩包(压缩包中有以中文为文件名的文件),直接使用官方封装的JlCompress::extractDir接口进行解压;
2,问题现象:解压后带有中文文件名的文件中文字符为乱码:
3,解决方法:经过与朋友反复研究,确定问题是zlib对中文编码的支持问题,quazip在封装过程虽然对中文进行编码处理,但是压缩包内部编码处理还是有问题; so,修改方法如下:
QString QuaZip::getCurrentFileName()const
{
QuaZip *fakeThis=(QuaZip*)this; // non-const
fakeThis->p->zipError=UNZ_OK;
if(p->mode!=mdUnzip) {
qWarning("QuaZip::getCurrentFileName(): ZIP is not open in mdUnzip mode");
return QString();
}
if(!isOpen()||!hasCurrentFile())
return QString();
QByteArray fileName(MAX_FILE_NAME_LENGTH, 0);
if((fakeThis->p->zipError=unzGetCurrentFileInfo64(p->unzFile_f, NULL, fileName.data(), fileName.size(),
NULL, 0, NULL, 0))!=UNZ_OK)
return QString();
//QString result = p->fileNameCodec->toUnicode(fileName.constData());
//QString result = QString(fileName);
QString result = QString::fromUtf8(fileName);
if (result.isEmpty())
return result;
// Add to directory map
p->addCurrentFileToDirectoryMap(result);
return result;
}
官方写法:QString result =p->fileNameCodec->toUnicode(fileName.constData());
改为:QString result =QString(fileName);或者QString result =QString::fromUtf8(fileName);
更多推荐
所有评论(0)