知行编程网知行编程网  2022-11-17 14:00 知行编程网 隐藏边栏  459 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python zipfile出现乱码怎么解决的相关知识,包括python爬虫乱码,以及Python解zip这些编程知识,希望对大家有参考作用。

如何解决python zipfile中的乱码

如果在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学习网,欢迎在线学习!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享