我写了一个java zip解压程序,但是在解压有时会产生中文乱码,我已经用了ant库了,但是还是会产生中文乱码,导致程序报错,代码如下:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
public class Test2 {
public static void main(String[] args) throws IOException {
File f1 = new File("f:/");                             
ZipFile zf = new ZipFile("f:/手册.zip");            
Enumeration<ZipEntry> e = (Enumeration<ZipEntry>) zf.getEntries();    
while(e.hasMoreElements()){
ZipEntry en = e.nextElement();
File f2 = new File(f1.getPath()+"/"+en.getName());           
System.out.println(en.getName()+"\t"+f2.getPath());

if(en.isDirectory()){           
f2.mkdir();
System.out.println(f2.getPath());
} else {                
f2.getParentFile().mkdirs();
f2.createNewFile();
InputStream in = zf.getInputStream(en);
OutputStream os = new FileOutputStream(f2);
byte[] buffer = new byte[1024];
int n = 0;
while((n=in.read(buffer))>0){
os.write(buffer, 0, n);
}
System.out.println(f2.getPath());
os.close();
in.close();
}

}
}
}
请各位高手帮忙看一下,哪里有问题。

解决方案 »

  1.   

    java的zip流域winzip与winrar的zip编码方式不同,Java的zip流是用java内置utf-8进行编码的,而且写死在zip流处理内部,而winzip等压缩软件不是这种编码,所以java的zip在处理winzip或者winrar的中文路径时就一定会出现乱码,而且java的zip流打包的中文路径winzip等压缩软件解压的时候也是乱码。如果要支持winzip需要修改jdk的zip流的内部程序或者自己实现zip流而不是用jdk内置的zip压缩流。
    如何修改我也不会,去研究一下java的zip流估计就行了。