From 4a860c77ffdcac117dbb7bcefd86d6f5a8d7fc0f Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 13 Nov 2024 12:35:59 +0800 Subject: [PATCH] =?UTF-8?q?ZipUtil.unzip=E5=A2=9E=E5=8A=A0=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E5=AE=B9=E9=94=99=EF=BC=88issue#I3UZ28@Gitee=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 ++- .../main/java/cn/hutool/core/util/ZipUtil.java | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b73aac692..24c448952 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,11 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.34(2024-11-12) +# 5.8.34(2024-11-13) ### 🐣新特性 * 【http 】 增加Windows微信浏览器识别(issue#IB3SJF@Gitee) +* 【core 】 ZipUtil.unzip增加编码容错(issue#I3UZ28@Gitee) ### 🐞Bug修复 * 【core 】 修复DateUtil.rangeToList中step小于等于0时无限循环问题(issue#3783@Github) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java index d44059f60..2e0dad053 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java @@ -34,10 +34,7 @@ import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.function.Consumer; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipOutputStream; +import java.util.zip.*; /** * 压缩工具类 @@ -65,6 +62,17 @@ public class ZipUtil { try { return new ZipFile(file, ObjectUtil.defaultIfNull(charset, CharsetUtil.CHARSET_UTF_8)); } catch (IOException e) { + // issue#I3UZ28 可能编码错误提示 + if(e instanceof ZipException){ + if(e.getMessage().contains("invalid CEN header")){ + try { + // 尝试使用不同编码 + return new ZipFile(file, CharsetUtil.CHARSET_UTF_8.equals(charset) ? CharsetUtil.CHARSET_GBK : CharsetUtil.CHARSET_UTF_8); + } catch (final IOException ex) { + throw new IORuntimeException(ex); + } + } + } throw new IORuntimeException(e); } }