导语:
本文主要介绍了关于python zipfile出现乱码怎么解决的相关知识,包括python爬虫乱码,以及Python解zip这些编程知识,希望对大家有参考作用。
如果在zipfile.ZipFile中得到的文件名有中文和日文,很可能是乱码,因为
在zip标准中,文件名的编码不是unicode,但是根据系统默认的字符集可能会被各种软件使用(这是一个猜测),当根据file flag检测到zipfile时,仅支持 cp437 和 utf。 -8。
具体zipfile模块中的源代码如下:
if flags & 0x800:
# UTF-8 file names extension
filename = filename.decode('utf-8')
else:
# Historical ZIP filename encoding
filename = filename.decode('cp437')
可以看到,除了编码正确识别为utf8时,会被识别解码为cp437编码,但如果实际是gbk等编码,就会变成乱码。所以解决方法是在解码为cp437后手动转换为正确的编码。
实际过程中,可以先解压zipfile,然后直接重命名unzip文件夹中的乱码文件。具体实施过程如下:
import os
def an_garcode(dir_names):
"""anti garbled code"""
os.chdir(dir_names)
for temp_name in os.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_name
except:
#如果已被正确识别为utf8编码时则不需再编码
pass
if os.path.isdir(temp_name):
#对子文件夹进行递归调用
an_garcode(temp_name)
#记得返回上级目录
os.chdir('..')
an_garcode(os.getcwd())
众多
视频,尽在python学习网,欢迎在线学习!
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何更改python环境变量09/04
- ♥ 如何在python中访问元组中的元素08/31
- ♥ Python初识类和对象12/12
- ♥ 如何使用python的import语句08/23
- ♥ python如何判断一个字符串是否包含特殊符号?08/22
- ♥ Python yield 实现迭代器协议11/07
内容反馈