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 方法從外部修改。
在調用ICSharpCode.SharpZipLib的ZipInputStream之前:
  1. // 出現亂碼就是因為CodePage不對  
  2.   
  3. Encoding gbk = Encoding.GetEncoding("gbk");  
  4.   
  5. ICSharpCode.SharpZipLib.Zip.ZipConstants.DefaultCodePage = gbk.CodePage; 
   這種方法,有很多優點:
   1.無需修改第三方控件源碼。
   2.方便快捷
   3.靈活性更強


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM