如何使用utf添加zip条目

我有一个方法将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);

有人可以解释我做了什么,为什么它有效?


Zip档案默认使用DOS(OEM)代码页来存储文件名。 Linux / unix实现在解包时使用系统代码页。 Mac OS默认使用utf-8。 所以在你的情况下,文件名是正确存储的,但Linux归档器不理解它。

链接地址: http://www.djcxy.com/p/70195.html

上一篇: How to add zip entry with utf

下一篇: modules directory outside of my 'webroot'