diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/VoucherManageServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/VoucherManageServiceImpl.java index 0a8e28e..a9a1d23 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/VoucherManageServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/VoucherManageServiceImpl.java @@ -49,8 +49,12 @@ import java.util.Objects; import java.util.stream.Collectors; import java.io.BufferedInputStream; import java.io.InputStream; +import java.io.OutputStream; import java.net.URLConnection; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.HashMap; import java.util.HashSet; import java.util.Set; @@ -247,8 +251,12 @@ public class VoucherManageServiceImpl extends BaseServiceImpl relatedWaybillIds = new HashSet<>(); - try (InputStream source = openSourceFile(voucher.getFileUrl()); - ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(source), StandardCharsets.UTF_8)) { + Path archivePath = downloadSourceFile(voucher.getFileUrl()); + try { + Charset archiveCharset = detectArchiveCharset(archivePath); + log.info("[凭证处理] 已识别压缩包文件名编码 voucherId={}, charset={}", voucherId, archiveCharset.name()); + try (InputStream source = Files.newInputStream(archivePath); + ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(source), archiveCharset)) { ZipEntry entry; while ((entry = zipInputStream.getNextEntry()) != null) { if (entry.isDirectory()) { @@ -322,17 +330,20 @@ public class VoucherManageServiceImpl extends BaseServiceImpl