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壓縮亂碼原因與解決方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!