java壓縮zip文件中文亂碼問題解決方法
通常用java來打包文件生成壓縮文件后,有如下兩個地方會出現(xiàn)亂碼 :
1、內(nèi)容的中文亂碼問題,這個問題網(wǎng)上很多人給出了解決方法,主要有兩種方法:一是修改sun的源碼;另一個是使用開源的類庫org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,這兩個類ant.jar中有,可以直接下載使用即可,毫無疑問,選擇后者更方便
2、壓縮文件注釋的中文亂碼問題:zos.setComment("中文測試");這個問題網(wǎng)上對應(yīng)的解決方法資料較少。在自己機器上的工程創(chuàng)建的測試類,沒有任何問題,但是在公司的項目中使用一直出現(xiàn)亂碼,通過使用設(shè)置編碼的方法(zos.setEncoding("gbk");)終于發(fā)現(xiàn)了問題,測試項目的編碼方式為gbk,而公司項目的默認編碼是utf-8,所以測試項目沒問題而公司的項目中出現(xiàn)了問題。
org.apache.tools.zip.ZipOutputStream默認使用項目的編碼方式,理論上講utf-8也是支持中文的,實在想不通為啥還是亂碼,通過setEncoding方法改成gbk即可解決
針對上述問題的示例代碼如下:
package com.compress;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class CompressEncodingTest {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
File f = new File("中文測試.txt");
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(
new FileOutputStream("zipTest.zip"), 1024));
zos.putNextEntry(new ZipEntry("中國人.txt"));
DataInputStream dis = new DataInputStream(new BufferedInputStream(
new FileInputStream(f)));
zos.putNextEntry(new ZipEntry(f.getName()));
int c;
while ((c = dis.read()) != -1) {
zos.write(c);
}
zos.setEncoding("gbk");
zos.setComment("中文測試");
zos.closeEntry();
zos.close();
}
}
相關(guān)文章
Java實現(xiàn)讀取SFTP服務(wù)器指定目錄文件的方法
SFTP是一種在安全通道上傳輸文件的協(xié)議,它是基于SSH(Secure Shell)協(xié)議的擴展,用于在客戶端和服務(wù)器之間進行加密的文件傳輸,這篇文章主要介紹了Java實現(xiàn)讀取SFTP服務(wù)器指定目錄文件,感興趣的朋友跟隨小編一起看看吧2023-08-08
spring task @Scheduled注解各參數(shù)的用法
這篇文章主要介紹了spring task @Scheduled注解各參數(shù)的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Java創(chuàng)建對象之顯示創(chuàng)建與隱式創(chuàng)建
在本篇文章中,小編會帶大家學(xué)習(xí)面向?qū)ο笾嘘P(guān)于對象的創(chuàng)建之顯示創(chuàng)建和隱式創(chuàng)建,其實類和對象作為面向?qū)ο笾凶罨镜模彩亲钪匾?需要的朋友可以參考下2023-05-05
springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式
這篇文章主要介紹了springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03
java使用jacob實現(xiàn)word轉(zhuǎn)pdf
這篇文章主要為大家詳細介紹了java使用jacob實現(xiàn)word轉(zhuǎn)pdf,通過調(diào)用模板文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12
Java慢查詢排查與性能調(diào)優(yōu)完整實戰(zhàn)指南
Java調(diào)優(yōu)是一個廣泛的話題,它涵蓋了代碼優(yōu)化、內(nèi)存管理、并發(fā)處理等多個方面,這篇文章主要介紹了Java慢查詢排查與性能調(diào)優(yōu)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-08-08
設(shè)計模式之構(gòu)建(Builder)模式 建造房子實例分析
構(gòu)建模式主要用來針對復(fù)雜產(chǎn)品生產(chǎn),分離部件構(gòu)建細節(jié),以達到良好的伸縮性,考慮到設(shè)計模式來源于建筑學(xué),因此舉一個建造房子的例子,需要的朋友可以參考下2012-12-12

