我有一个将inputStream添加到zip作为条目的方法:
private void addToZip(InputStream is, String filename) throws Exception {
try {
ZipEntry zipEntry = new ZipEntry(filename);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = is.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
} finally {
IOUtils.closeQuietly(is);
}
}
当文件名包含UTF-8字符(如áé...)时,会发生问题。在zip文件中,它将保存为
?????
,而当我在ubuntu 12.10中解压缩它时,它看起来像:N├бstroje
而不是Nástroje
。对于此示例,我使用了jdk6,但现在我也尝试了jdk7:
zos = new ZipOutputStream(fos, Charset.forName("UTF-8"));
但是没有成功。
我还尝试了Apache Commons Zip并设置了编码,但是也没有成功。
那么,如何在文件名中将带有unicode符号的文件添加到zip中呢?
最佳答案
似乎这行解决了我的问题:
zos.setCreateUnicodeExtraFields(UnicodeExtraFieldPolicy.ALWAYS);
有人可以向我解释这是怎么做的,为什么会起作用?