如果Java Zip压缩文件名称出现乱码,可以通过设置ZipEntry的编码方式来解决。 ZipEntry默认使用UTF-8编码方式,如果需要使用其他编码方式,可以使用以下代码:
ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFile), Charset.forName("GBK")); zipOutputStream.putNextEntry(new ZipEntry(new String(entryName.getBytes(Charset.forName("GBK")), Charset.forName("UTF-8"))));
其中,将ZipOutputStream的编码方式设置为所需的编码方式(例如“GBK”),并将ZipEntry的名称使用getBytes方法转换为需要的编码方式(例如“UTF-8”)。
另外,如果压缩文件中包含中文文件名,还可以使用Apache的Compress库来避免乱码问题。使用Compress库的ZipArchiveOutputStream和ZipArchiveEntry来进行压缩,可以自动处理文件名编码和解码。例如:
ZipArchiveOutputStream zipOutputStream = new ZipArchiveOutputStream(new FileOutputStream(zipFile));
ZipArchiveEntry entry = new ZipArchiveEntry(file, file.getName());
zipOutputStream.putArchiveEntry(entry);
IOUtils.copy(new FileInputStream(file), zipOutputStream);
zipOutputStream.closeArchiveEntry();
这种方式需要添加以下依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.18</version>
</dependency>