美文网首页
python unzip中文乱码问题

python unzip中文乱码问题

作者: RedB | 来源:发表于2020-05-19 19:49 被阅读0次

如果我们用python的zipfile库去解压zip文件的话,若有文件名为中文的文件或文件夹,解压之后文件名会是乱码,如图


乱码

文中所说,这个Bug的原因是,zipfile库中根据文件flag检测的时候,只考虑了utf-8和cp437两种情况,如果实际是gbk等其他编码时就变为乱码了,所以解决的方法在于先按cp437 encode后,重新按gbk编码去decode;此外,还有一部分字符需要用utf-8的解码方式(2020.6.10遇到),在except中处理。

网上文章很多,最方便的还是先用extractall()批量解压,再批量重命名。基于这篇文章的代码(感谢作者),我写了一个完整版的函数,提供给大家:

import os
def rename_garbled_filenames(path):
    def rename(root_path, filename):
        try:
            oldpath = os.path.join(root_path, filename)
            try:
                newfilename = filename.encode('cp437').decode('gbk') 
            except:
                newfilename = filename.encode('utf-8').decode('utf-8')
            newpath = os.path.join(root_path, newfilename)
            os.rename(oldpath, newpath)
        except Exception as e:
            print('error:', e)
    # 先重命名文件
    for root_path, dir_names, file_names in os.walk(path):
        for filename in file_names:
            rename(root_path, filename)
    # 再重命名文件夹:不能在一次os.walk()里同时重命名文件和文件夹,会有问题
    for root_path, dir_names, file_names in os.walk(path):
        for dirname in dir_names:
            rename(root_path, dirname)

相关文章

网友评论

      本文标题:python unzip中文乱码问题

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