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

Java解压多zip包时读取中文文件名报invalid CEN header如何修复

问题修复方案

错误原因

你遇到的invalid CEN header (bad entry name)报错,核心原因是zip压缩包内的文件名编码和你代码中指定的解码编码不匹配:

  • 你当前代码指定的解码编码是MS950(即繁体中文Big5编码)
  • Windows 10简体中文系统默认压缩生成的zip包,会使用GBK编码存储中文文件名
  • 简体中文「你好」不符合Big5编码规则,解码失败就会触发该报错,英文/数字文件名不受编码影响所以可以正常读取

修复方案

只需要修改字符集配置即可,把原来的MS950编码替换为适配简体中文Windows压缩包的GBK编码:
找到代码中这一行:

final static Charset CHINESE_CHARSET = Charset.forName("MS950");

替换为:

final static Charset CHINESE_CHARSET = Charset.forName("GBK");

如果修改后还是存在报错,大概率是你的压缩包是用7-Zip等工具选择UTF-8编码压缩的,可以再尝试替换为UTF-8编码:

import java.nio.charset.StandardCharsets;

// 替换字符集定义
final static Charset CHINESE_CHARSET = StandardCharsets.UTF_8;

可选优化点(非必须)

你可以根据需要补充以下逻辑提升代码健壮性:

  • 给folder.listFiles()增加非空判断,避免路径配置错误导致空指针异常
  • 解压前先判断文件后缀是否为.zip,避免非压缩文件触发异常
  • 目录创建使用mkdirs()替代mkdir(),确保多层级目录可以正常创建

内容的提问来源于stack exchange,提问作者Mr.mmmmmm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 23:30:02