解决python中zipfile出现乱码的问题
小编给大家分享一下解决python中zipfile出现乱码的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家学习,希望大家阅读完这篇文章后大所收获,下面让我们一起去学习方法吧!
在zipfile.ZipFile中获得的filename有中日文则很大可能是乱码,这是因为
在 zip 标准中,对文件名的 encoding 用的不是 unicode,而可能是各种软件根据系统的默认字符集来采用(此为猜测),而zipfile 中根据文件 flag 检测的时候,只支持 cp437 和 utf-8。
具体zipfile模块中的源代码如下:
ifflags&0x800:#UTF-8filenamesextensionfilename=filename.decode('utf-8')else:#HistoricalZIPfilenameencodingfilename=filename.decode('cp437')
可见编码被正确识别为utf8时的情况外,都会被识别并decode为cp437编码,但如果实际是gbk等其他编码时就变为乱码了。所以解决的方法在于被decode为cp437后,重新再手动转为正确的编码。
在实际过程中可以对已经先用zipfile进行解压,然后对unzip文件夹中的乱码文件直接进行重命名。具体实现过程如下:
importosdefan_garcode(dir_names):"""antigarbledcode"""os.chdir(dir_names)fortemp_nameinos.listdir('.'):try:#使用cp437对文件名进行解码还原new_name=temp_name.encode('cp437')#win下一般使用的是gbk编码new_name=new_name.decode("gbk")#对乱码的文件名及文件夹名进行重命名os.rename(temp_name,new_name)#传回重新编码的文件名给原文件名temp_name=new_nameexcept:#如果已被正确识别为utf8编码时则不需再编码passifos.path.isdir(temp_name):#对子文件夹进行递归调用an_garcode(temp_name)#记得返回上级目录os.chdir('..')an_garcode(os.getcwd())
以上是解决python中zipfile出现乱码的问题的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。