Java ZipEntry UTF-8字符集

Java ZipEntry UTF-8字符集,java,utf-8,zip,Java,Utf 8,Zip,我正在使用Java在主zip(名为finalZip.zip)中创建一些zip文件,这些文件名包含像áóç这样的字符。当我尝试创建zip文件时,文件名是错误的。例如,当3-ORDINÁRIA-2017-05-03.zip出现时,会出现3-ORDIN+üRIA-2017-05-03.zip String zipName= number + "- ORDINÁRIA -" + sdf.format(sdfComplete.parse(date.getTime()) + ".zip"; ByteArr

我正在使用Java在主zip(名为finalZip.zip)中创建一些zip文件,这些文件名包含像áóç这样的字符。当我尝试创建zip文件时,文件名是错误的。例如,当3-ORDINÁRIA-2017-05-03.zip出现时,会出现3-ORDIN+üRIA-2017-05-03.zip

String zipName= number + "- ORDINÁRIA -" + sdf.format(sdfComplete.parse(date.getTime()) + ".zip";

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(bos);
try {
  bos = createZipFile(); // populate each zipFile with some images
  // generating zip file, ex: 6-ORDINÁRIA-2017-03-15.zip
  zipFinal.putNextEntry(new ZipEntry(zipName));
  zipFinal.write(bos.toByteArray());
  zipFinal.closeEntry();
}

...

我想要UTF-8字符集的zip文件。如何解决此字符集问题?

使用
公共zipoutpstream(OutputStream out,charset charset)
构造函数为条目名称和注释指定字符集。

该方法的javadoc:

创建一个新的ZIP输出流

参数:

输出实际输出流

字符集用于对条目名称和注释进行编码的字符集

例如,它使用UTF-8字符集:

ZipOutputStream zip = new ZipOutputStream(bos, java.nio.charset.StandardCharsets.UTF_8);

如果有人仍然有这个问题,或者文件中的数据不能是utf-8

  • 首先,invoque方法必须如下所示:
    final ZipOutputStream zip=newzipoutpstream(baos,java.nio.charset.StandardCharsets.utf8)

  • 当插入数据且无法对其进行编码时:
    zip.write(data.toString().getBytes(“UTF-8”)


我的ZipoutStream只接受一个构造函数(OutputStream)。我觉得我的java版本有点旧了。它从1.7开始就可以使用。你在?我在1.8上,但是当我导入StandardCharset时,UTF_8常量是未定义的。请输入:
java.nio.charset.StandardCharset.UTF_8
我想你已经导入了
sun.nio.cs.StandardCharset
类。通常应避免使用
sun
软件包。