You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解码Windows 10生成的压缩包中的乱码文件名?

解决Windows生成Zip包文件名乱码问题

问题根源

Windows系统默认生成Zip包时,文件名使用系统本地编码(中文环境为GBK,英文环境为CP1252),而Python的zipfile模块默认采用IBM437编码解码文件名,两者不匹配就会出现乱码。Ubuntu生成的Zip包默认使用UTF-8编码,所以不会有问题;无法本地复现是因为你的本地环境编码和客户端Windows环境不一致。

解决方案

修改代码逻辑:先将namelist()返回的乱码字符串重新编码为IBM437(还原Zip包中存储的原始字节),再尝试用Windows常用编码(GBK/CP1252)解码,最后保留原逻辑作为 fallback。

修改后的代码:

from zipfile import ZipFile

with ZipFile('arhive.zip') as myzip:
    for name in myzip.namelist():
        raw_bytes = name.encode("IBM437")
        uname = name
        
        # 优先尝试中文Windows环境的GBK编码
        try:
            uname = raw_bytes.decode("GBK")
        except UnicodeDecodeError:
            # 尝试英文Windows环境的CP1252编码
            try:
                uname = raw_bytes.decode("CP1252")
            except UnicodeDecodeError:
                # 最后尝试俄语环境常用的IBM866编码
                try:
                    uname = raw_bytes.decode("IBM866")
                except UnicodeDecodeError:
                    pass
        
        print(uname)

额外建议

如果客户端可以更换Zip生成工具,推荐使用支持UTF-8编码的工具(比如7-Zip,勾选"使用UTF-8编码文件名"选项),这样zipfile会自动识别UTF-8编码,无需额外处理。

内容的提问来源于stack exchange,提问作者Jon Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:05:06