关于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);
阅读全文
0 0
- 关于Quazip解压中文乱码问题的解决
- Quazip在Windows下压缩Ubuntu下解压出现的乱码问题
- 解决ubuntu中zip解压的中文乱码问题
- 解决ubuntu中zip解压的中文乱码问题
- 关于ZipArchive 解压中文编码乱码的问题
- 关于解决中文乱码问题的总结
- 关于mysql中文乱码问题的解决
- 关于PD4ML解决中文乱码的问题
- 关于中文乱码问题的解决
- 文件解压及打包 并解决中文乱码问题
- Java实现Zip压缩与解压(解决中文乱码问题)
- ubuntu 解决zip解压出现中文乱码问题
- Ubuntu中解决解压zip文件中文乱码问题
- Java实现Zip压缩与解压(解决中文乱码问题)
- ubuntu下解决解压zip文件中文文件名乱码问题
- PHP解压ZIP压缩包,解决中文乱码问题
- Java中解压文件名有中文的rar包出现乱码问题的解决
- 关于Ant的中文文件名乱码问题的解决
- 什么是守护线程?
- DNS 域名系统 (Domain Name System)
- FTP、TFTP
- ==、equals、hashCode区别?
- Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.bui
- 关于Quazip解压中文乱码问题的解决
- 线程池? 如何设计一个动态大小的线程池,有哪些方法?
- 设计模式之外观模式(Facade)
- android cocos2d-x3.14 编译 boost 1_64_0
- 排序——冒泡排序
- js生成二维码(qrcode.js)
- TCP拥塞处理—Congestion Handing
- 编写高效的JavaScript程序
- 测试