DotNetZip解決檔名稱中文字元不顯示的問題
由於工作需要,從網上下載了一個壓縮元件--DotNetZip,使用感覺良好,但是目錄中有中文名稱的檔案時,就會出現問題,要麼名稱顯示不全,要麼就顯示若干個問號,很是令人苦惱!!
沒辦法,只好自己動手解決問題啦,一步步的跟蹤定位,最後找到ZipEntry類的WriterHeader方法,估計是寫檔案頭,檔名稱應當寫在這裡,經過除錯,發現這一行:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->/**//////////////////////////////////替換內容
byte[] x = System.Text.Encoding.GetEncoding("GB2312").GetBytes(FileName);
Int16 filenameLength = (Int16)x.Length;
/**/////////////////////////////////被替換內容
// filename length (Int16)
//Int16 filenameLength = (Int16)FileName.Length;
/**/////////////////////////////////
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1/**//////////////////////////替換內容
2for (j = 0; (j < x.Length) && (i + j < bytes.Length); j++)
3{
4 bytes[i + j] = x[j];
5 if (_Debug) System.Console.Write(" {0:X2}", bytes[i + j]);
6}
7if (_Debug) System.Console.WriteLine();
8
9/**/////////////////////////被替換內容
10
11//for (j = 0; (j 12//{
13// bytes[i + j] = System.BitConverter.GetBytes(c[j])[0];
14// if (_Debug) System.Console.Write(" {0:X2}", bytes[i + j]);
15//}
16//if (_Debug) System.Console.WriteLine();
17/**/////////////////////////
程式大意是將檔名稱轉換為字元陣列,再將字元陣列壓縮為位元組陣列,而一個字元中只有一個漢字,壓縮完之後只有一個位元組,而一個位元組是無法表示漢字的,所以,我先採用GetBytes直接生成位元組陣列,獲得字串的真實長度[即漢字為2,字母數字為1],然後將位元組陣列逐個拷至目的位元組陣列,編譯執行,中文名稱果然順利顯示出來了!!!
問題好象是解決了,可是當解壓時,卻傻眼了,都是些亂碼.不過有了上次的除錯經驗,不需要辛苦跟蹤了,知道問題出在讀Header的地方,果然在ZipEntry類中,有ReadHeader方法,設斷點,除錯,最後定位於Shared類中的StringFromBuffer方法
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1/**//////////////////////////替換內容
2string str2 = System.Text.Encoding.GetEncoding("GB2312").GetString(buf, start, maxlength);
3return str2;
4
5/**/////////////////////////被替換內容
6//int i;
7//char[] c = new char[maxlength];
8//for (i = 0; (i 9//{
10// c[i] = (char)buf[i]; // System.BitConverter.ToChar(buf, start+i*2);
11//}
12//string s = new System.String(c, 0, i);
13//return s;
14/**/////////////////////////
這個方法大意是,將位元組陣列逐個轉換為字元陣列,將漢字的編碼拆成兩個字元,這很明顯會造成亂碼,既然編碼採用GetBytes,那麼解碼也就用反的,GetString就行了,編譯執行,大功告成!!
原始碼下載:http://files.cnblogs.com/redleaf1995/DotNetZip.rar
原文地址:http://www.cnblogs.com/redleaf1995/archive/2009/10/22/1587908.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-617182/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java解決Itext pdf中文不顯示問題Java
- win10 桌面圖示不顯示名字如何解決_win10桌面圖示不顯示名稱解決方法Win10
- JSP顯示中文問題的解決方案(轉)JS
- LiveCharts中文顯示亂碼問題的解決Echarts
- [20160325]bbed 中文字元顯示的顯示問題字元
- Windows10系統下工作列圖示名稱不顯示的解決方法Windows
- JIVE在WINDOWS下的中文顯示問題的解決Windows
- 解決WordPress文章上傳圖片使用中文名不顯示的問題
- LINUX SSH顯示中文亂碼問題解決Linux
- 解決MySQL中文亂碼和插入中文不顯示的方法MySql
- Ubuntu中解決pdf中文亂碼或不顯問題Ubuntu
- 解決arcgis for android中feature不顯示的問題Android
- EXP匯出資料檔名稱重複問題的解決
- win10系統工作列圖示名稱不顯示如何解決Win10
- vue-解決background-image:url不顯示問題Vue
- linux字元介面下的亂碼問題---改稱英文顯示Linux字元
- 三種方法教你解決輸入法不顯示問題
- WordPress中文標題無法顯示的解決方法
- 解決 PBootCMS 後臺登入不顯示驗證碼的問題boot
- navicat 表中文顯示? 解決
- 全面解決amule容易崩潰和中文顯示、輸入的問題(轉)
- 解決國外模板h1、h2、h3…不顯示中文文章標題的問題
- 徹底解決pidgin群顯示null問題及無法輸入中文的問題Null
- MagicDraw UML英文企業版12.5的中文字元顯示問題字元
- 關於 maatwebsite/excel 匯出不能識別中文檔名稱的問題WebExcel
- 解決windows上靜態連結cairo不顯示東西的問題WindowsAI
- ifconfig顯示的不是ifcfg配置檔案的名稱
- ubuntu 中文顯示亂碼問題Ubuntu
- 解決下載的CHM檔案無法顯示網頁問題網頁
- 解決SecureCRT中文顯示亂碼Securecrt
- QT中文顯示亂碼解決QT
- 生僻字顯示?的字元亂碼解決字元
- 解決CentOS 中顯示亂碼問題CentOS
- TortoiseGit資料夾和檔案圖示不顯示解決方法Git
- 解決json顯示日期帶T的問題。JSON
- HPUX下,解決xmanager的顯示亂碼問題UX
- Linux下jdk1.5的安裝及中文顯示問題解決方案(轉)LinuxJDK
- 在linux下顯示中文目錄和檔名Linux