用户工具

站点工具


踩坑记录:20230724zipfile采用默认cp437导致文件名乱码

zipfile采用默认cp437导致文件名乱码

背景

由于网盘下载下来压缩包比较多,一个一个手动解压比较费时,所以等战拜托我写了一个针对目录下所有压缩包的自解压程序。

经过

在运行这个自动解压所有压缩包的时候,等战发现有一部分压缩包解压出来的是乱码文件名,而内容并非是乱码。

结果

经过百度查找以及查看zipfile的源代码,发现对于所有非utf8编码的文件名,zipfile库对文件名的处理都是:
filename = filename.decode('cp437')
因为cp437是一种无论二进制长什么样子都会正常解码的编码,所以未报错,而是在文件夹内生成对应的乱码文件名。 于是我利用cp437这种可以完美解码的特性,可以不修改zipfile库,把文件名重新编码成二进制,调用charset_mnbvc库进行编码检测,从而使解压的文件名正常。

踩坑记录/20230724zipfile采用默认cp437导致文件名乱码.txt · 最后更改: 2023/07/26 15:32 由 MNBVC项目组