zoukankan      html  css  js  c++  java
  • 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.灵活性更强
  • 相关阅读:
    3.18 每日一练
    第二章 练习
    第一章 练习
    Redis常用操作大全和Python操作Redis
    vue学习【第七篇】:Vue之导入Bootstrap
    Vue学习【第六篇】:Vue-cli脚手架(框架)与实战案例
    Redis 安装,配置以及数据操作
    vue学习【第五篇】:Vue组件
    vue学习【第三篇】:vue之node.js的简单介绍
    Vue学习【第二篇】:ES6简单介绍
  • 原文地址:https://www.cnblogs.com/wenpeng/p/9397026.html
Copyright © 2011-2022 走看看