2、在zipfile.ZipFile中获得的filename有中日文则很大可能是乱码,烂瘀佐栾这是因为在 zip 标准中,对文件砘捃坑聒名的 encoding 用的不是 unicode,而可能是各种软件根据系统的默认字符集来采用(此为猜测),而zipfile 中根据文件 flag 检测的时候,只支持 cp437 和 utf-8。具体zipfile模块中的源代码如下:
3、可见编码被正确识别为utf8时的情况外,都会被识别并decode为cp437编码,但如果实际是gbk等其他编码时就变为柳暌杷笪乱码了。所以解决的方法在于被decode为cp437后,重新再手动转为正确的编码。在实际过程中可以对已经先用zipfile进行解压,然后对unzip文件夹中的乱码文件直接进行重命名。具体实现过程如下: