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)源的類(lèi)庫(kù)org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,這兩個(gè)類(lèi)ant.jar中有,可以直接下載使用即可,毫無(wú)疑問(wèn),選擇后者更方便
2、壓縮文件注釋的中文亂碼問(wèn)題:zos.setComment("中文測(cè)試");這個(gè)問(wèn)題網(wǎng)上對(duì)應(yīng)的解決方法資料較少。在自己機(jī)器上的工程創(chuàng)建的測(cè)試類(lèi),沒(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(); } }
- 解決javaWEB中前后臺(tái)中文亂碼問(wèn)題的3種方法
- java中form以post、get方式提交數(shù)據(jù)中文亂碼問(wèn)題總結(jié)
- java中Filter過(guò)濾器處理中文亂碼的方法
- java 頁(yè)面url傳值中文亂碼的解決方法
- Java讀寫(xiě).properties文件解決中文亂碼問(wèn)題
- JAVA POST與GET數(shù)據(jù)傳遞時(shí)中文亂碼問(wèn)題解決方法
- java 逐行讀取txt文本如何解決中文亂碼
- Java 解決讀寫(xiě)本地文件中文亂碼的問(wèn)題
- java頁(yè)面中文亂碼的解決辦法
- Java中文亂碼解決方案全解析,讓你的程序“說(shuō)人話(huà)”!
相關(guān)文章
Java實(shí)現(xiàn)base64圖片編碼數(shù)據(jù)轉(zhuǎn)換為本地圖片的方法
這篇文章主要介紹了Java實(shí)現(xiàn)base64圖片編碼數(shù)據(jù)轉(zhuǎn)換為本地圖片的方法,涉及java編碼轉(zhuǎn)換及圖片文件生成相關(guān)操作技巧,需要的朋友可以參考下2018-06-06Assert.assertNotNull()斷言是否是空問(wèn)題
這篇文章主要介紹了Assert.assertNotNull()斷言是否是空問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10關(guān)于Java實(shí)現(xiàn)HttpServer模擬前端接口調(diào)用
這篇文章主要介紹了關(guān)于Java實(shí)現(xiàn)Http?Server模擬前端接口調(diào)用,Http?協(xié)議是建立在?TCP?協(xié)議之上的協(xié)議,所以能用?TCP?來(lái)自己模擬一個(gè)簡(jiǎn)單的?Http?Server?當(dāng)然是可以的,需要的朋友可以參考下2023-04-04基于SpringBoot2的Shiro最簡(jiǎn)配置操作(兩個(gè)文件)
這篇文章主要介紹了基于SpringBoot2的Shiro最簡(jiǎn)配置操作(兩個(gè)文件),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01SpringBoot使用GraphQL開(kāi)發(fā)Web API實(shí)現(xiàn)方案示例講解
這篇文章主要介紹了SpringBoot使用GraphQL開(kāi)發(fā)Web API實(shí)現(xiàn)方案,GraphQL是一個(gè)從服務(wù)端檢數(shù)據(jù)的查詢(xún)語(yǔ)言。某種程度上,是REST、SOAP、或者gRPC的替代品2023-04-04詳解SpringBoot中5種類(lèi)型參數(shù)傳遞和json數(shù)據(jù)傳參的操作
當(dāng)涉及到參數(shù)傳遞時(shí),Spring?Boot遵循HTTP協(xié)議,并支持多種參數(shù)傳遞方式,這些參數(shù)傳遞方式可以根據(jù)請(qǐng)求的不同部分進(jìn)行分類(lèi),2023-12-12