比方说,我的文件夹uploadFiles下有文件若干个,如:“图片1.jpg”,:“图片2.jpg”,:“图片3.jpg”3个图片文件
这些图片的文件名都是中文的名称,
我现在通过java压缩程序把这3个文件压缩后,然后下载下来,解压后,发现图片的中文名称全部是乱码了,请求帮助
,我需要解决中文问题,请不要把图片名称改为英文名称或数字哦?
我的代码如下:

    public static void zipFiles(File[] srcfile,File zipfile){
        byte[] buf=new byte[1024];
        ZipOutputStream out=null;
        try {
            //ZipOutputStream类:完成文件或文件夹的压缩          out=new ZipOutputStream(new FileOutputStream(zipfile));
            for(int i=0;i<srcfile.length;i++){
                FileInputStream in=new FileInputStream(srcfile[i]);
                out.putNextEntry(new ZipEntry(srcfile[i].getName()));
                int len;
                while((len=in.read(buf))>0){
                    out.write(buf,0,len);
                }
                out.flush();
                out.closeEntry();
                in.close();
            }
            out.close();
            System.out.println("压缩完成.");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
   if(out !=null){
 try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  
   }
}
    }

解决方案 »

  1.   

    http://www.w3china.org/blog/more.asp?name=lhwork&id=33407
      

  2.   

    Java本身带的ZipOutputStream是会使用UTF-8格式输出文件名的。如果你也用Java的ZipInputStream解开不会有乱码问题,虽然WinRar之类会看到乱码
    如果你不希望它使用UTF-8,你可以使用Apache中的ants带的那个ZipOutputStream之类 。这个我记得是使用默认编码的
      

  3.   

    我已经说了啊,用apache ants中带的那个ZipOutputStream,用法是一样的。只是编码不会使用UTF-8
      

  4.   

    我就是使用UTF-8的,我现在出现乱码的地方就是解压后,发现里面的每个单独文件的中文名称全是乱码了
    out.putNextEntry(new ZipEntry(srcfile[i].getName()));
    我debug到这里发现变量srcfile[i].getName()是中文的,但是,输出的文件却是乱码
      

  5.   

    。。你到底有没有看我的回复啊。标准JDK的ZipOutputStream是必定如此!因为它使用了UTF-8编码生成Entry的名称,而WinRar等是使用GBK解析的(使用JDK本身的ZipInputStream是可以读出正确的中文名称,不会是乱码的)
    所以我建议你使用Apache ants中带的org.apache.tools.zip.ZipOutputStream,它不会使用UTF-8编码!