pythonzipfile出现乱码怎么解决

python

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

在 zip 标准中,对文件名的 encoding 用的不是 unicode,而可能是各种软件根据系统的默认字符集来采用(此为猜测),而zipfile 中根据文件 flag 检测的时候,只支持 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时的情况外,都会被识别并decode为cp437编码,但如果实际是gbk等其他编码时就变为乱码了。所以解决的方法在于被decode为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教程,尽在网,欢迎在线学习!

以上是 pythonzipfile出现乱码怎么解决 的全部内容, 来源链接: utcz.com/z/521768.html

回到顶部