最近使用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中的文件名为中文时不会出现乱码。