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)的解決方法資料較少。在自己機(jī)器上的工程創(chuàng)建的測試類,沒有任何問題,但是在公司的項(xiàng)目中使用一直出現(xiàn)亂碼,通過使用設(shè)置編碼的方法(zos.setEncoding("gbk");)終于發(fā)現(xiàn)了問題,測試項(xiàng)目的編碼方式為gbk,而公司項(xiàng)目的默認(rèn)編碼是utf-8,所以測試項(xiàng)目沒問題而公司的項(xiàng)目中出現(xiàn)了問題。
org.apache.tools.zip.ZipOutputStream默認(rèn)使用項(xiàng)目的編碼方式,理論上講utf-8也是支持中文的,實(shí)在想不通為啥還是亂碼,通過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實(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()斷言是否是空問題
這篇文章主要介紹了Assert.assertNotNull()斷言是否是空問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教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?來自己模擬一個簡單的?Http?Server?當(dāng)然是可以的,需要的朋友可以參考下2023-04-04基于SpringBoot2的Shiro最簡配置操作(兩個文件)
這篇文章主要介紹了基于SpringBoot2的Shiro最簡配置操作(兩個文件),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01SpringBoot使用GraphQL開發(fā)Web API實(shí)現(xiàn)方案示例講解
這篇文章主要介紹了SpringBoot使用GraphQL開發(fā)Web API實(shí)現(xiàn)方案,GraphQL是一個從服務(wù)端檢數(shù)據(jù)的查詢語言。某種程度上,是REST、SOAP、或者gRPC的替代品2023-04-04詳解SpringBoot中5種類型參數(shù)傳遞和json數(shù)據(jù)傳參的操作
當(dāng)涉及到參數(shù)傳遞時,Spring?Boot遵循HTTP協(xié)議,并支持多種參數(shù)傳遞方式,這些參數(shù)傳遞方式可以根據(jù)請求的不同部分進(jìn)行分類,2023-12-12