==== zipfile采用默认cp437导致文件名乱码==== === 背景 === 由于网盘下载下来压缩包比较多,一个一个手动解压比较费时,所以等战拜托我写了一个针对目录下所有压缩包的自解压程序。 === 经过 === 在运行这个自动解压所有压缩包的时候,等战发现有一部分压缩包解压出来的是乱码文件名,而内容并非是乱码。 === 结果 === 经过百度查找以及查看zipfile的源代码,发现对于所有非utf8编码的文件名,zipfile库对文件名的处理都是:\\ filename = filename.decode('cp437')\\ 因为cp437是一种无论二进制长什么样子都会正常解码的编码,所以未报错,而是在文件夹内生成对应的乱码文件名。 于是我利用cp437这种可以完美解码的特性,可以不修改zipfile库,把文件名重新编码成二进制,调用charset_mnbvc库进行编码检测,从而使解压的文件名正常。