python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python解压zip文件名乱码

Python解压zip文件名乱码问题的具体分析和解决方案

作者:detayun

使用Python处理含有中文文件名的压缩文件时,这些中文文件名会出现乱码,今天我们就来看一下如何来解决这个乱码的问题,以下是具体分析和解决方案,需要的朋友可以参考下

中文文件名解压乱码通常与压缩文件中的编码声明和Python解压模块的默认编码处理方式有关。以下是具体分析和解决方案:

问题根源分析

ZIP格式

TAR格式

GZ/BZ2格式

修复方案

修改解压函数,显式指定编码格式:

import zipfile
import tarfile
import gzip
import bz2
import os
import shutil

def extract_archive(archive_path, extract_to='.', encoding='utf-8'):
    """支持中文路径的解压函数"""
    comp_type = detect_compression(archive_path)

    # 根据类型调用对应解压方法
    if comp_type == 'zip':
        # 关键修复:强制使用指定编码
        with zipfile.ZipFile(archive_path, 'r') as zip_ref:
            # 处理乱码:将乱码文件名转换为正确编码
            for file in zip_ref.namelist():
                try:
                    # 尝试用指定编码解析文件名
                    fixed_name = file.encode('cp437').decode(encoding)
                except:
                    fixed_name = file
                # 重命名文件
                zip_ref.NameToInfo[file].filename = fixed_name
            zip_ref.extractall(extract_to)
            
    elif comp_type == 'tar':
        # 关键修复:指定编码打开tar
        with tarfile.open(archive_path, 'r', encoding=encoding) as tar_ref:
            tar_ref.extractall(extract_to)
            
    elif comp_type == 'gz':
        # 注意:gz通常只压缩单个文件,文件名需手动处理
        raw_name = os.path.basename(archive_path)[:-3]
        output_path = os.path.join(extract_to, raw_name)
        with gzip.open(archive_path, 'rb') as gz_ref:
            with open(output_path, 'wb') as out_file:
                shutil.copyfileobj(gz_ref, out_file)
                
    elif comp_type == 'bz2':
        raw_name = os.path.basename(archive_path)[:-4]
        output_path = os.path.join(extract_to, raw_name)
        with bz2.open(archive_path, 'rb') as bz2_ref:
            with open(output_path, 'wb') as out_file:
                shutil.copyfileobj(bz2_ref, out_file)
    else:
        print(f"不支持的压缩格式: {archive_path}")

关键修复点说明

ZIP文件处理

TAR文件处理

编码参数建议

补充建议

通过以上修改,可系统性解决中文文件名解压乱码问题。如果仍有问题,建议检查压缩文件本身的编码声明(如用7z等工具查看元数据)。

到此这篇关于Python解压zip文件名乱码问题的具体分析和解决方案的文章就介绍到这了,更多相关Python解压zip文件名乱码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文