1. 程式人生 > >Java檔名包含中文的檔案壓縮後文件名亂碼問題,完美解決方案

Java檔名包含中文的檔案壓縮後文件名亂碼問題,完美解決方案

以下類從jdk的src.zip裡提取 

ZipConstants.java   
ZipEntry.java   
ZipOutputStream.java  

eclipse中新建工程,放入上述三個檔案


1.ZipOutputStream.java檔案改名為CNZipOutputStream.java,class名稱改為CNZipOutputStream,構造器名稱改為CNZipOutputStream 
 
2.新增member,這個member記錄編碼方式 
  private static String encoding="UTF-8"; 
  

3.新增構造器(可以讓這個class在new的時候,設定檔名的編碼) 

public CNZipOutputStream(OutputStream out,String encoding) { 

this(out); 

this.encoding=encoding; 

  
4.getUTF8Bytes(String a)方法的最前面加上如下程式碼 
try{ 
   if (s!=null&&s!=""&&!encoding.toUpperCase().equals("UTF-8")){ 
        return s.getBytes(encoding); 
   } 
}catch(Exception byteE){ 



5.在ZipEntry類中找到initIDs()靜態塊和構造器(如下),註釋掉
static  
{   
Zip library is loaded from System.initializeSystemClass 
initIDs();   
}


8.右鍵專案-->Export-->Java-->JAR file-->選擇輸出路徑,寫好包名(CNZip.jar)-->finish


將打好的jar包匯入工程,引入程式(注意:程式中要使用剛才新打的包,千萬不要導成jdk自帶的包)

9.將壓縮方法 zip(CNZipOutputStream out, File f, String base)中的 out.putNextEntry(new org.apache.tools.zip.ZipEntry(base))改為 out.putNextEntry(new ZipEntry(base))

10.打包時的輸出流改為 out = new CNZipOutputStream(new FileOutputStream(zipFileName),"gbk");


問題解決

相關推薦

Java檔名包含中文檔案壓縮亂碼問題完美解決方案

以下類從jdk的src.zip裡提取 ZipConstants.java   ZipEntry.java   ZipOutputStream.java  eclipse中新建工程,放入上述三個檔案 1.ZipOutputStream.java檔案改名為CNZipOutpu

javaweb 導出亂碼的問題解決方案

new msi utf-8 方案 mozilla urlencode pan agen string fileName = new String(fileName.getBytes("ISO8859-1"), "UTF-8"); 或者 Stri

ZIP檔案解壓亂碼解決辦法

在windows下建立的zip包在linux下解壓縮後文件名出現亂碼,有人說unzip有個-O選項可以制定編碼,但我的系統上不行,沒有這個選項。最終是用java的jar解壓,然後在用convmv更改編碼: 解壓 jar vxf a.zip 測試,這步只是顯示結果,但不會做

linux unzip 解壓亂碼

個數 文件名 出現 pan 不用 文件 spa 輸入 win 在windows上zip的包,rz上傳到linux下,發現出現亂碼。記錄下解決過程: 1.確定windows上的默認字符集 在Windows平臺下,直接在命令行中,輸入:chcp 在顯示的結果中,會出現一個數字,

如何解決Mac裡面解壓亂碼問題

如果你把Mac當成你的主要工作機器,而你的同事用的都是Windows,有時候交換文件就是一件很痛苦的事,比如今天要說到的問題:當同事傳給你一個zip檔案,結果你拿過來解壓後發現裡面有些檔案的檔名如果帶中文的話,你看到的將會是一堆亂碼。。。Jay一直都無視這個問題,直

mac開啟docx&解壓zip亂碼

一、有些版本pages無法開啟docx,但可以開啟doc,Mac系統中其實內建了轉換docx的工具,在terminal中執行如下命令 textutil -convert doc + 需要轉換的doc

Chimm.Excel —— 使用Java 操作 excel 模板檔案生成 excel

# Chimm.Excel —— 設定模板,填充資料,就完事兒了~ ``` _____ _ _ _____ _ / __ \ | (_)

js獲取url截取url參數截取url

logs ica cati exp 得到 explore test www. html 獲取當前: var url = window.location.href; 百度為例: var url=window.location.href; console.info(ur

對服務器上所有Word做全文檢索的解決方案-Java

不可 servlet 並保存 保存文件 客戶端請求 打開文檔 word文檔 文件的 文本文件 一、背景介紹 Word文檔與日常辦公密不可分,在實際應用中,當某一文檔服務器中有很多Word文檔,假如有成千上萬個文檔時,用戶查找打開包含某些指定關鍵字的文檔就變得很困難,目

[轉載]java讀寫word完美解決方案

重點 app PE 列表 mage too 介紹 代碼 而且 做項目的過程中,經常需要把數據裏裏的數據讀出來,經過加工,以word格式輸出。 在網上找了很多解決方案都不太理想,偶爾發現了PageOffice,一個國產的Office插件,開發調用非常簡單!比網上介紹的poi,

linux下中文亂碼解決

target 系統 使用 targe 名稱 默認 通過 轉碼 dash 在windows上使用ftp上傳文件到Linux上,中文名稱在Linux系統中顯示為亂碼。雖然將Linux的env設置了LANG=en_US.UTF-8,並且本地的Shell客戶端編碼也設置成UT

"原始檔名長度大於檔案系統支援的長度無法刪除"的解決方案

import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; /** * @author jiangwenwen * 解決原始檔名長度大於檔案系統支援的長度而無法刪除 * */ pu

Vue資料繫結本閃爍問題分析及解決方案

Vue文字閃爍問題 一、問題描述 程式碼示例: <div id="app"> <span>{{user.userName}}</span> </div> 頁面顯示: {{user.userName}} 問題詳情:在載

Linux下vi編輯器編輯檔案時對於意外退出的的再次開啟的解決方案

1、當我們在虛擬機器裡面編輯檔案的時候,喜歡用vi編輯器,但是由於叢集的不穩定,或者自己開啟以後忘記關閉,切換到另一個介面繼續工作,當再次回來時候,已經失去了編輯的能力了。當我們再次開啟此檔案的時候就會出現如下介面:<--當時出錯忘了截圖了,只顧著解決呢,也是學習了一些

java讀寫word完美解決方案

java2word 是一個在java程式中呼叫 MS Office Word 文件的元件(類庫)。該元件提供了一組簡單的介面,以便java程式呼叫他的服務操作Word 文件。 這些服務包括: 開啟文件、新建文件、 查詢文字、替換文字, 插入文字、插入圖片、插入表格, 在書籤處插入文字、插入圖片、插入表格等

關於python操作帶有中文報錯的解決辦法

python 行操作 nic 文件 div 操作文件 pre 關於 文件路徑 python代碼的編碼格式 #coding:utf-8 在操作文件時,如果文件名帶有中文,則需要將文件路徑以Unicode的編碼格式進行操作 具體的方式如下 path = "你的路徑

SVN安裝圖示不顯示問題解決

1、SVN安裝(服務端--客戶端)TortoiseSVN的下載地址 :   https://tortoisesvn.net/downloads.html在安裝svn客戶端的時候一定要勾選,否則在idea上整合svn的時候會找不到 svn.exe 而報錯。如果安裝時忘記勾選了的

nodejs adm-zip 解壓 中文亂碼 問題解決

ring keyword 需要 util iconv stc utils var 題解 修改需要使用到iconv-lite包 (npm安裝即可),修改 zipEntry.js 文件中的 entryName 方法 var iconv = require(‘iconv-li

window nginx 中文路徑, 亂碼問題解決

題解 設置 nginx windows系統 erro 我們 ima alt 通過 window nginx 中文路徑, 文件名亂碼, error, not found 此問題是由於windows系統編碼與nginx編碼設置不一致導致的,因此我們要統一二者的編碼 nginx編

springmvc的multipartResolver上傳亂碼

context 上傳 spring ipa 開始 源碼 resolv for 註意 html 設置頁面的編碼方式 <meta charset="UTF-8"> <!-- for HTML5 --> <meta http-equiv="Conte