最近用.net core做开发的时候,遇到了解压压缩文件时出现乱码的问题

其实究其原因就是编码不正确,当我要使用GB2312编码时发现.net core 中默认没有该编码,最后百度发现可以引用nuget包来实现

参考:.NET CORE中Encoding对GB2312等编码的支持

回头再来说说解压缩的问题,我用的是SharpZipLib来进行压缩解压的,使用的版本为1.32 nuget链接SharpZipLib

解决方法也很简单

  1. 引入nuget 包 System.Text.Encoding.CodePages
  2. 在启动的时候,注册EncodingProvider,执行代码如下

    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  3. 解压缩时使用GB2312编码进行解压缩就可以了,参考代码

    ZipStrings.CodePage = Encoding.GetEncoding("GB2312").CodePage;
    using ZipInputStream s = new(File.OpenRead(sourceFile));
    ZipEntry theEntry;
    while ((theEntry = s.GetNextEntry()) != null)
    {
        //do somthing
    }
  4. 另外使用System.IO.Compression.ZipFile压缩解压的处理方法也差不多,参考代码

    var zipPath = @"C:\temp\test.zip";            
    ZipFile.ExtractToDirectory(zipPath, @"C:\temp", Encoding.GetEncoding("GB2312"));

最后,关于类似编码的问题基本可以通过这种方式解决