ICSharpCode.SharpZipLib 中文乱码问题

Posted wenpeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.灵活性更强

以上是关于ICSharpCode.SharpZipLib 中文乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

npoi与memcached中的ICSharpCode.SharpZipLib版本冲突的解决方案

使用NPOI时ICSharpCode.SharpZipLib版本冲突问题解决

csharp 需添加引用ICSharpCode.SharpZipLib

C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件

C#使用ICSharpCode.SharpZipLib.dll压缩文件夹和文件

C#壓縮文件幫助類 使用ICSharpCode.SharpZipLib.dll