美文网首页
Python3 zipfile解压文件名是中文 解压后乱码

Python3 zipfile解压文件名是中文 解压后乱码

作者: 竞媒体 | 来源:发表于2019-12-25 10:12 被阅读0次

    问题描述:利用python3 的zipfile模块解压zip文件包,这个文件包中有的文件名是中文,解压后这个中                    文文件名显示为乱码。

    问题分析:因此zipfile中根据文件 flag 检测的时候,只支持 cp437 和 utf-8。

                      具体就是查找 zipfile.py 源代码找到下面的代码:

                      1: if flags & 0x800:

                      2: # UTF-8 file names extension

                       3: filename = filename.decode('utf-8')

                        4: else:

                        5: # Historical ZIP filename encoding

                         6: filename = filename.decode('cp437')

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

    解决方案:许多人想到修改源码文件,杀鸡还要用牛刀。其实可以不用。只需要把显示为乱码的文件名 转换成utf-8编码格式就能正确显示。

    import os

    import zipfile

    r = zipfile.is_zipfile('test.zip')

    if r:

            fz = zipfile.ZipFile(zip_src, 'r')

            for file in fz.namelist():

                fz.extract(file)

                right_file = file.encode('cp437').decode('utf-8')

                os.rename(file,right_file)

    相关文章

      网友评论

          本文标题:Python3 zipfile解压文件名是中文 解压后乱码

          本文链接:https://www.haomeiwen.com/subject/kanqoctx.html