.net6下使用DotnetZip解压文件,中文出现乱码问题解决

  • .net6下使用DotnetZip解压文件,中文出现乱码问题解决已关闭评论
  • 149 次浏览
  • A+
所属分类:.NET技术
摘要

DotnetZip使用方法见此文章
https://www.cnblogs.com/pengze0902/p/6124659.html

在netframework环境下,使用上面文章中的设置Encoding为Default的方法即可解决中文乱码问题

DotnetZip使用方法见此文章
https://www.cnblogs.com/pengze0902/p/6124659.html

在netframework环境下,使用上面文章中的设置Encoding为Default的方法即可解决中文乱码问题
.net6下使用DotnetZip解压文件,中文出现乱码问题解决

 

但是当我使用.net6创建控制台项目并采用上述代码时,发现中文乱码问题并未得到解决。

经过整合搜索内容,发现在.netcore中若想使中文不发生乱码,需要进行如下配置

1.

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 

 2.

System.Text.Encoding.GetEncoding("gbk") 

 1 /// <summary>  2         /// 解压ZIP文件  3         /// </summary>  4         /// <param name="strZipPath">待解压的ZIP文件</param>  5         /// <param name="strUnZipPath">解压的目录</param>  6         /// <param name="overWrite">是否覆盖</param>  7         /// <returns>成功:true/失败:false</returns>  8         public static bool Decompression(string strZipPath, string strUnZipPath, bool overWrite)  9         { 10             if (string.IsNullOrEmpty(strZipPath)) 11             { 12                 throw new ArgumentNullException(strZipPath); 13             } 14             if (string.IsNullOrEmpty(strUnZipPath)) 15             { 16                 throw new ArgumentNullException(strUnZipPath); 17             } 18             try 19             { 20                 var options = new ReadOptions 21                 { 22                     //设置编码,解决解压文件时中文乱码 23                     Encoding = System.Text.Encoding.GetEncoding("gbk") 24                 }; 25                 using (var zip = ZipFile.Read(strZipPath, options)) 26                 { 27                     foreach (var entry in zip) 28                     { 29                         if (string.IsNullOrEmpty(strUnZipPath)) 30                         { 31                             strUnZipPath = strZipPath.Split('.').First(); 32                         } 33                         entry.Extract(strUnZipPath, overWrite 34                                 ? ExtractExistingFileAction.OverwriteSilently 35                                 : ExtractExistingFileAction.DoNotOverwrite); 36                     } 37                     return true; 38                 } 39             } 40             catch (Exception ex) 41             { 42                 throw new Exception(ex.Message); 43             } 44         }

 

 

 注:framework程序中使用Encoding.Default即可解决中文乱码问题
但在.netcore中需要使用Encoding.GetEncoding("gbk")解决中文乱码问题