ZipEntry UTF-8字符集

时间:2017-05-03 18:25:30

标签: 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";

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文件。我该如何解决这个charset问题?

2 个答案:

答案 0 :(得分:1)

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

方法的javadoc:

  

创建一个新的ZIP输出流。

     

参数:

     

输出实际输出流

     

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

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

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

答案 1 :(得分:0)

万一仍有问题或文件中的数据不能为utf-8

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

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