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.灵活性更强

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值