Python解压ZIP包中文乱码的解决方案

苏见山
苏见山
发布时间:2026-10-14| 3人浏览过
原创

本文介绍了Python中解压ZIP文件时常见的中文乱码问题及其解决方法。由于ZipFile模块在处理中文文件名时可能遇到编码问题,导致解压后的文件名显示异常。文章提供了三种解决方案,包括创建文件名映射表、修改源码解码格式以及手动处理文件写入和文件夹创建。推荐采用手动处理的方式,以确保文件名正确显示。

问题背景

乱码产生的原因:

在使用ZipFile模块导出文件时,如果遇到中文解码不正确,Windows系统上会出现乱码现象。至于Linux系统是否会出现类似情况,由于未进行测试,目前尚不清楚。

解决方案

解决方式:

1. 创建一个文件名映射表(这种方法不太方便,但在处理少量文件夹嵌套时还可以使用)。

2. 修改源码中的解码格式(这种方法也不太方便,我自己尝试后遇到了其他错误)。

3. 手动写入文件并创建文件夹(推荐方法)。

手动创建的写法:

代码实现


with zipfile.ZipFile(file=zip_save_path, mode='r') as zf:
      # 解压到指定目录,首先创建一个解压目录
      os.mkdir(unzip_dir_path)
      for old_name in zf.namelist():
        # 获取文件大小,目的是区分文件夹还是文件,如果是空文件应该不好用。
        file_size = zf.getinfo(old_name).file_size
        # 由于源码遇到中文是cp437方式,所以解码成gbk,windows即可正常
        new_name = old_name.encode('cp437').decode('gbk')
        # 拼接文件的保存路径
        new_path = os.path.join(unzip_dir_path, new_name)
        # 判断文件是文件夹还是文件
        if file_size > 0:
          # 是文件,通过open创建文件,写入数据
          with open(file=new_path, mode='wb') as f:
            # zf.read 是读取压缩包里的文件内容
            f.write(zf.read(old_name))
        else:
          # 是文件夹,就创建
          os.mkdir(new_path)

结果验证

结果正常:

以上就是Python解压ZIP包中文乱码解决方法的详细内容,更多关于Python解压ZIP包中文乱码的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。