ZipInputStream 指定字符集?

作者站长头像
站长
· 阅读数 16
new ZipInputStream(new FileInputStream("test.zip"), StandardCharsets.UTF_8)

没有用呢,中文的文件、文件夹仍会报错(malformed input off : 1, length : 1)。ZipInputStream  指定字符集?

ZipInputStream  指定字符集?

这里都有注释的嘛,为什么会这样?

回复
1个回答
avatar
test
2024-06-25

你把编码换成GBK就可以了:

FileInputStream input = new FileInputStream(targetPath);
ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(input), Charset.forName("GBK"));

原因是操作系统平台的差异,导致zip压缩包的编码格式不同,windows默认使用GB2312格式,mac和linux默认使用UTF-8格式,你指定UTF-8对于GB2312的字符转化没有起作用,而GBK是兼容GB2312的。如果你想你的代码无视操作系统差异,可以使用Apache Commons Compress这个包的压缩/解压缩方法试试:https://zhuanlan.zhihu.com/p/389762356

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容