java压缩文件出现乱码问题

jywbd 2011-05-17 11:23:57
比方说,我的文件夹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();
}
}
}
}
...全文
392 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jywbd 2011-05-17
  • 打赏
  • 举报
回复
有没有其他办法哦?
ChDw 2011-05-17
  • 打赏
  • 举报
回复
Java本身带的ZipOutputStream是会使用UTF-8格式输出文件名的。如果你也用Java的ZipInputStream解开不会有乱码问题,虽然WinRar之类会看到乱码


如果你不希望它使用UTF-8,你可以使用Apache中的ants带的那个ZipOutputStream之类 。这个我记得是使用默认编码的
zqs0605 2011-05-17
  • 打赏
  • 举报
回复
字符集问题,统一字符集可以避免乱码问题
jywbd 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 chdw 的回复:]
。。。。。你到底有没有看我的回复啊。标准JDK的ZipOutputStream是必定如此!因为它使用了UTF-8编码生成Entry的名称,而WinRar等是使用GBK解析的(使用JDK本身的ZipInputStream是可以读出正确的中文名称,不会是乱码的)


所以我建议你使用Apache ants中带的org.apache.tools.zip.ZipOutputStream,它不会使用U……
[/Quote]
谢谢,现在弄好
ChDw 2011-05-17
  • 打赏
  • 举报
回复
。。。。。你到底有没有看我的回复啊。标准JDK的ZipOutputStream是必定如此!因为它使用了UTF-8编码生成Entry的名称,而WinRar等是使用GBK解析的(使用JDK本身的ZipInputStream是可以读出正确的中文名称,不会是乱码的)


所以我建议你使用Apache ants中带的org.apache.tools.zip.ZipOutputStream,它不会使用UTF-8编码!
jywbd 2011-05-17
  • 打赏
  • 举报
回复
我就是使用UTF-8的,我现在出现乱码的地方就是解压后,发现里面的每个单独文件的中文名称全是乱码了
out.putNextEntry(new ZipEntry(srcfile[i].getName()));
我debug到这里发现变量srcfile[i].getName()是中文的,但是,输出的文件却是乱码
ChDw 2011-05-17
  • 打赏
  • 举报
回复
我已经说了啊,用apache ants中带的那个ZipOutputStream,用法是一样的。只是编码不会使用UTF-8

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧