java壓縮zip文件中文亂碼問(wèn)題解決方法
通常用java來(lái)打包文件生成壓縮文件后,有如下兩個(gè)地方會(huì)出現(xiàn)亂碼 :
1、內(nèi)容的中文亂碼問(wèn)題,這個(gè)問(wèn)題網(wǎng)上很多人給出了解決方法,主要有兩種方法:一是修改sun的源碼;另一個(gè)是使用開(kāi)源的類庫(kù)org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,這兩個(gè)類ant.jar中有,可以直接下載使用即可,毫無(wú)疑問(wèn),選擇后者更方便
2、壓縮文件注釋的中文亂碼問(wèn)題:zos.setComment("中文測(cè)試");這個(gè)問(wèn)題網(wǎng)上對(duì)應(yīng)的解決方法資料較少。在自己機(jī)器上的工程創(chuàng)建的測(cè)試類,沒(méi)有任何問(wèn)題,但是在公司的項(xiàng)目中使用一直出現(xiàn)亂碼,通過(guò)使用設(shè)置編碼的方法(zos.setEncoding("gbk");)終于發(fā)現(xiàn)了問(wèn)題,測(cè)試項(xiàng)目的編碼方式為gbk,而公司項(xiàng)目的默認(rèn)編碼是utf-8,所以測(cè)試項(xiàng)目沒(méi)問(wèn)題而公司的項(xiàng)目中出現(xiàn)了問(wèn)題。
org.apache.tools.zip.ZipOutputStream默認(rèn)使用項(xiàng)目的編碼方式,理論上講utf-8也是支持中文的,實(shí)在想不通為啥還是亂碼,通過(guò)setEncoding方法改成gbk即可解決
針對(duì)上述問(wèn)題的示例代碼如下:
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("中文測(cè)試.txt");
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(
new FileOutputStream("zipTest.zip"), 1024));
zos.putNextEntry(new ZipEntry("中國(guó)人.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("中文測(cè)試");
zos.closeEntry();
zos.close();
}
}
- java使用gzip實(shí)現(xiàn)文件解壓縮示例
- Java解壓和壓縮帶密碼的zip文件過(guò)程詳解
- Java實(shí)現(xiàn)解壓zip壓縮包的兩種方法(支持多層級(jí))
- Java后臺(tái)實(shí)現(xiàn)瀏覽器一鍵導(dǎo)出下載zip壓縮包
- Java多文件以ZIP壓縮包導(dǎo)出的實(shí)現(xiàn)方法
- 用Java進(jìn)行zip文件壓縮與解壓縮
- Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法
- java實(shí)現(xiàn)一次性壓縮多個(gè)文件到zip中的方法示例
- Java創(chuàng)建ZIP壓縮文件的方法
- Java實(shí)現(xiàn)文件壓縮為zip和解壓zip壓縮包
- 淺談Java?Zip?壓縮及其優(yōu)化
相關(guān)文章
Java實(shí)現(xiàn)讀取SFTP服務(wù)器指定目錄文件的方法
SFTP是一種在安全通道上傳輸文件的協(xié)議,它是基于SSH(Secure Shell)協(xié)議的擴(kuò)展,用于在客戶端和服務(wù)器之間進(jìn)行加密的文件傳輸,這篇文章主要介紹了Java實(shí)現(xiàn)讀取SFTP服務(wù)器指定目錄文件,感興趣的朋友跟隨小編一起看看吧2023-08-08
spring task @Scheduled注解各參數(shù)的用法
這篇文章主要介紹了spring task @Scheduled注解各參數(shù)的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Java創(chuàng)建對(duì)象之顯示創(chuàng)建與隱式創(chuàng)建
在本篇文章中,小編會(huì)帶大家學(xué)習(xí)面向?qū)ο笾嘘P(guān)于對(duì)象的創(chuàng)建之顯示創(chuàng)建和隱式創(chuàng)建,其實(shí)類和對(duì)象作為面向?qū)ο笾凶罨镜?,也是最重要?需要的朋友可以參考下2023-05-05
springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式
這篇文章主要介紹了springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
java使用jacob實(shí)現(xiàn)word轉(zhuǎn)pdf
這篇文章主要為大家詳細(xì)介紹了java使用jacob實(shí)現(xiàn)word轉(zhuǎn)pdf,通過(guò)調(diào)用模板文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
SpringBoot實(shí)現(xiàn)圖形驗(yàn)證碼的操作方法
隨著安全性的要求越來(lái)越高,目前許多項(xiàng)目中都使用了驗(yàn)證碼,驗(yàn)證碼也有各種類型,如 圖形驗(yàn)證碼、短信驗(yàn)證碼、郵件驗(yàn)證碼、人臉識(shí)別等,本文給大家介紹SpringBoot實(shí)現(xiàn)圖形驗(yàn)證碼的方法,感興趣的朋友跟隨小編一起看看吧2024-07-07
Java慢查詢排查與性能調(diào)優(yōu)完整實(shí)戰(zhàn)指南
Java調(diào)優(yōu)是一個(gè)廣泛的話題,它涵蓋了代碼優(yōu)化、內(nèi)存管理、并發(fā)處理等多個(gè)方面,這篇文章主要介紹了Java慢查詢排查與性能調(diào)優(yōu)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-08-08
設(shè)計(jì)模式之構(gòu)建(Builder)模式 建造房子實(shí)例分析
構(gòu)建模式主要用來(lái)針對(duì)復(fù)雜產(chǎn)品生產(chǎn),分離部件構(gòu)建細(xì)節(jié),以達(dá)到良好的伸縮性,考慮到設(shè)計(jì)模式來(lái)源于建筑學(xué),因此舉一個(gè)建造房子的例子,需要的朋友可以參考下2012-12-12

