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