java zip紧缩乱码缘由与解决方法引见【JAVA教程】,java

java zip紧缩乱码的缘由与处理方法:(引荐:java视频教程)
运转环境
Jdk 1.5,win 7中文版
JDK1.5中有zip紧缩相干的API,在java.util.zip包下面。一般情况下,运用JDK自带的API把目次(文件)紧缩成zip包,步骤以下:
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(file)); Out.putNextEntry(new ZipEntry(entryName)); //If entry is directory //above codes are enough //else if entry is file //then the codes below is needed FileInputStream in = new FileInputStream(infile); byte[] bs = newbyte[1024]; int b = 0; while((b = in.read(bs)) != -1) { zos.write(bs, 0, b); } in.close();
假如要打包的目次名或文件名中包括中文字符,这些目次或文件的称号就会涌现乱码,缘由是JDK自带的API中,在写入ZipEntry的时刻,采纳的编码默许的是UTF8(貌似还只有这一种,没办法变动,听说Java7有所改善),而win7操作系统中文版在处置惩罚zip文件的时刻采纳的是GBK编码,编码和解码的处置惩罚差别,造成了打包以后的文件在win7中文版中看到的是乱码。
能够采纳的处理方案是经由过程应用第三方API完成zip紧缩,以处理中文乱码问题。以下是应用apache的compress的zip紧缩的完成,所需jar包为commons-compress-1.2.jar
ArchiveOutputStream os = new ArchiveStreamFactory() .createArchiveOutputStream(ArchiveStreamFactory.ZIP, out); if(os instanceof ZipArchiveOutputStream) { ((ZipArchiveOutputStream) os).setEncoding("GBK"); } //...some code omitted os.putArchiveEntry(new ZipArchiveEntry(path+"/"+file.getName())); IOUtils.copy(new FileInputStream(file), os); os.closeArchiveEntry();
更多java学问请关注java基础教程栏目。
以上就是java zip紧缩乱码缘由与处理方法引见的细致内容,更多请关注ki4网别的相干文章!