Python3中zipfile模块文件名乱码问题

发布时间 2023-03-22 21:13:28作者: 帅胡

在zipfile.ZipFile中获得的filename有中日文则很大可能是乱码,这是因为

在zip标准中,对文件名的 encoding 用的不是 unicode,而可能是各种软件根据系统的默认字符集来采用(此为猜测),而zipfile中根据文件 flag 检测的时候,只支持 cp437 和 utf-8。

可见编码被正确识别为utf8时的情况外,都会被识别并decode为cp437编码,但如果实际是gbk等其他编码时就变为乱码了。所以解决的方法在于被decode为cp437后重新再手动转为正确的编码。具体代码如下:

#这里是在ZipFile.infolist()方法获得的info中取得filename
name = info.filename
try:
    #使用cp437对文件名进行解码还原
    name = name.encode('cp437')
    #win下一般使用的是gbk编码
    name = name.decode("gbk")
except:
    #如果已被正确识别为utf8编码时则不需再编码
    pass