最近使用java.util.zipoutputstream发现中文名出现乱码,一直试着使用new String(filename.getBytes("GBK"),"ISO-8859-1");还是无效。后来查阅资料,java.util.zipoutputstream无法设置字符集,建议使用org.apache.tools.zip.ZipOutputStream,这样的话可以设置字符集。
try{
//添加ZipEntry,并ZipEntry中写入文件流
zipos.putNextEntry(new ZipEntry(fileName));
os=new DataOutputStream(zipos);
InputStream is=new FileInputStream(f);
byte[] b = new byte[100];
int length = 0;
while((length = is.read(b))!= -1){
os.write(b, 0, length);
is.close();
zipos.closeEntry();
}catch(Exception e){
e.printStackTrace();
try{
//添加ZipEntry,并ZipEntry中写入文件流
zipos.putNextEntry(new ZipEntry(fileName));
os=new DataOutputStream(zipos);
InputStream is=new FileInputStream(f);
byte[] b = new byte[100];
int length = 0;
while((length = is.read(b))!= -1){
os.write(b, 0, length);
}
//这里就是设置文件的字符集类型,如果不设置,这样文件名就很容易出现乱码
zipos.setEncoding("gbk");is.close();
zipos.closeEntry();
}catch(Exception e){
e.printStackTrace();
}
这样就可以保证zip中的文件名为中文时不会出现乱码。

本文介绍如何解决使用Java的ZipOutputStream压缩文件时遇到的中文文件名乱码问题。推荐使用org.apache.tools.zip.ZipOutputStream并设置字符集来避免乱码。
2097

被折叠的 条评论
为什么被折叠?



