关于Quazip解压中文乱码问题的解决

来源:互联网 发布:in my secret life知乎 编辑:程序博客网 时间:2024/05/17 06:01


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);或者QStringresult =QString::fromUtf8(fileName);