ICSharpCode.SharpZipLib 中文亂碼問題

今天在調用ICSharpCode.SharpZipLib解壓zip文件時出現了中文文件亂碼的問題。

解決過程如下:

1.判斷是否壓縮包本身問題。經查zip文件夾在本地直接解壓打開時正確的中文名稱,所以不是壓縮包本身的問題。

2.判斷是否是web頁面的編碼問題,經查web頁面的編碼爲UTF-8,也不是頁面問題。

3.問題的焦點集中到第三方庫,ICSharpCode.SharpZipLib.dll

4.通過在網上搜索,出現了多種解決方案:

    a.修改源碼中類ZipConstants.cs的ConvertToString方法

      public static string ConvertToString(byte[] data)

{

       return Encoding.GetEncoding("gb2312").GetString(data, 0, data.Length);

       //return Encoding.ASCII.GetString(data,0, data.Length);

}

  

public static byte[] ConvertToArray(string str)

{

       return Encoding.GetEncoding("gb2312").GetBytes(str);

       //return Encoding.ASCII.GetBytes(str);

}

這種方法我感覺不夠直觀破壞性大。

b.修改源碼ZipEntryFactory.cs文件中MakeFileEntry函數。

將result.IsUnicodeText =isUnicodeText_改爲 result.IsUnicodeText =true

我嘗試了這種方法,但是沒有解決我的問題。

c.使用DefaultCodePage 方法從外部修改。

方法見:http://forestkqq.iteye.com/blog/1600749

在調用ICSharpCode.SharpZipLib的ZipInputStream之前:

  1. // 出現亂碼就是因爲CodePage不對  
  2.   
  3. Encoding gbk = Encoding.GetEncoding("gbk");  
  4.   
  5. ICSharpCode.SharpZipLib.Zip.ZipConstants.DefaultCodePage = gbk.CodePage; 

   這種方法,有很多優點:

   1.無需修改第三方控件源碼。

   2.方便快捷

   3.靈活性更強

發佈了7 篇原創文章 · 獲贊 20 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章