5

如何解压缩具有 unicode 文件名的 zip 文件?这是我的代码:

try {
    ZipInputStream zis = new ZipInputStream(
            new FileInputStream(zipFile));
    ZipEntry ze = zis.getNextEntry();

    System.setProperty("file.encoding", "UTF-8");
    while (ze != null) {
        String fileName = new String(ze.getName().getBytes("UTF-8"));
        System.out.println(fileName);
        File newFile = new File(outputFolder + File.separator + fileName );

        BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(newFile));
        OutputStreamWriter osw = new OutputStreamWriter(outStream, Charset.forName("UTF-8"));
        int ch;
        StringBuffer buffer1 = new StringBuffer();
        while ((ch = zis.read()) > -1) {
            buffer1.append((char) ch);
        }
        osw.write(buffer1.toString());
        osw.close();
        outStream.close();

        ze = zis.getNextEntry();
    }

    zis.closeEntry();
    zis.close();
} catch (IOException ex) {
    ex.printStackTrace();
}

但我收到错误UTFDataFormatException::

06-05 08:46:33.394: W/System.err(777): java.io.UTFDataFormatException: bad second or third byte at 6 
06-05 08:46:33.394: W/System.err(777): at java.nio.charset.ModifiedUtf8.decode(ModifiedUtf8.java:56) 
06-05 08:46:33.426: W/System.err(777): at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:270) 
06-05 08:46:33.426: W/System.err(777): at com.learnlang.utility.ZipManager.unZipIt(ZipManager.java:62) 
06-05 08:46:33.434: W/System.err(777): at com.learnlang.HomeActivity$progressThread.run(HomeActivity.java:317) 

我的课是ZipManager

如何解决这个问题?

4

1 回答 1

0

根据异常,您的文件似乎实际上不在UTF-8编码中。

此外,问题不在于文件名。这一行:

 String fileName = new String(ze.getName().getBytes("UTF-8"));

是没有意义的,因为ze.getName()已经是正确的java字符串了。

于 2013-06-05T09:05:54.093 回答