写点什么

Qt|使用 QuaZip 压缩包中文乱码问题解决

  • 2022 年 10 月 06 日
    河北
  • 本文字数:678 字

    阅读完需:约 2 分钟

Qt|使用QuaZip压缩包中文乱码问题解决

今天解决了一个困扰很长时间的问题,前一段时间做解压缩包并且是加密的压缩包文件,并且也给友友们进行了更新,说明了如何编译以及详细的使用。


为什么我会更文这篇文章呢?


这还是昨天在使用的过程中,发现了这样一个问题,加密后的压缩包中如果存在中文,使用 QuaZip::getCurrentFileName 方法时,会返回乱码,在Qt解压带有密码的加密文件这篇文章中我也说明了如何解决中文乱码问题,但是!但是!!这都不是终极解决方法!


虽然使用了 std::string 的方式转换成了 unicode 方法,但是对于有些汉字却不能转换过来,基于这种原因,我放弃了改文章中的转换方法,那么继续查阅资料,发现了一个更好的方式。


那么,我就来讲解下我是如何解决 QuaZip 中解密带有密码的压缩包的中文乱码问题吧!


使用 QuaZip::getCurrentFileName 获取当前正在操作的文件名,此时如果是中文就会出现乱码,例如下面的样子:


"E:\1\Test\鎿嶄綔淇℃伅灞曠ず鐣岄潰鏁堟灉鍥 png"


就这个乱码使用上一篇文章居然解析不出来,而且文件的"."也不翼而飞了,这叫个什么鬼,所以推掉之前所用的解决方法。


中文乱码的问题肯定是在 getCurrentFileName 函数中出错的,那么索性就更改该函数。


这就涉及到了Qt编译QuaZip以及程序应用这篇文章,在编译 QuaZip 中做更改。


找到 quazip.cpp 文件中 getCurrentFileName 这个函数。


会发现,该函数中有进行 unicode 编码转换,但是传输出来的内容却还是乱码,说明该函数并没有起到任何作用。


如果不知道我说的是那句代码,那么,就看下面的图片就知道啦!


就是红蓝线框出来的问题,这里我们进行修改,改成下面这句代码

 QString result = QString::fromUtf8(fileName);
复制代码

修改后的样式,如下


用户头像

书山有路勤为径,学海无涯苦作舟 2022.07.01 加入

擅长语言:C++ 涉及语言:Python

评论

发布
暂无评论
Qt|使用QuaZip压缩包中文乱码问题解决_c++_中国好公民st_InfoQ写作社区