Net Core 解决压缩文件解压成中文文件名乱码问题

在工作项目中遇到了这个问题。
环境是.Net 6
包是 System.IO.Compression.ZipFile, Version=6.0.0.0;

修改之前解压方法

     // zipPath 压缩文件的路径,basepath目标文件夹路径
    ZipFile.ExtractToDirectory(zipPath, basepath)

这导致了压缩文件中的中文名称解压到新的文件夹后乱码;

导入NueGet包 System.Text.Encoding.CodePages
我这里用的是6.0.0;
之后在服务启动项中注册
加上这个编码集提供者实例

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

解压方法修改

 /// <summary>
        /// 解压缩
        /// </summary>
        /// <param name="fileStream"></param>
        /// <returns></returns>
        public static string Decompress(Stream fileStream)
            var zipPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{Guid.NewGuid():N}.zip");
            using (FileStream file = File.Create(zipPath))
                // 复制文件
                fileStream.CopyTo(file);
                // 清空缓冲区数据
                file.Flush();
            var basepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Guid.NewGuid().ToString("N"));
            if (!Directory.Exists(basepath))
                Directory.CreateDirectory(basepath);
            //将指定 zip 存档中的所有文件都解压缩到文件系统的一个目录下
            ZipFile.ExtractToDirectory(zipPath, basepath, System.Text.Encoding.GetEncoding("gbk"), true);
            File.Delete(zipPath);
            return basepath;
                                    如果文件路径中带有中文时会在文件路径中出现码,通过查找质料知道其主要原因是:在zip标准中,对文件名的 encoding 用的不是 unicode,而可能是各种软件根据系统的默认字符集来采用(此为猜测)而zipfile中根据文件flag 检测的时候,只支持 cp437 和 utf-8,而Windows系统使用的是gbk。处理的办法:一更改源码:像我这个版本python3.10.8的具体解决方法是在python安装目录下找到lib文件夹下的zipfile.py然后将该文件的第1374行的  file
                                    使用.net core 3.1 框架做一个SharpZipLib功能服务的时候,遇到了中文文件后出现码,由于这个代码之前在wpf上使用一直没问题,所以感觉应该出在.net core 3.1引用的编码库上。
解决办法:
添加引用最新包:System.Text.Encoding.CodePages
然后在项目初始化的时候对编码库进行引用注册:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
之前报错的代码就可以正
                                    .net文件夹内容的压缩1.安装Nuget 包 System.IO.Compression2.生成压缩包与
1.安装Nuget 包 System.IO.Compression
安装命令:insatll-package  System.IO.Compression (也可用NuGet管理器安装)!
2.生成压缩包与
ZipFile.CreateFromDirectory(@"G:\临时\test\2109135555", @"G:\临时\test\release.zip");//压缩
ZipFi
                                    System.IO.Compression命名空间包含如下的基本的文件和流压缩压缩服务的类型, 还可以使用这些类型来读取和修改压缩文件的内容,主要有以下类:
ZipFile
ZipArchive
ZipArchiveEntry
DeflateStream
GZipStream 
1.使用 ZipFile 类创建和提取有一个 .zip 文件扩展名的压缩文件:必须引
                                    (SharpZipLib.dll)http://www.icsharpcode.net/ ///  /// 压缩文件 /// using System;using System.IO;using ICSharpCode.SharpZipLib.Checksums;using ICSharpCode.SharpZipLib.Zip;using ICSharpCode.SharpZipLi
                                    这里用的SharpZipLib库,由于windows的Zip格式的压缩包编码方式是GBK,所以这里是为了设置码方式是GBK。        这里实例化了一个CodePagesEncodingProvider,切记,这个类不在Dotnet框架中,在使用的过程中没有报错,但是根本获取不到GBK的码方式,所以完全解决不了中文名码的方式,若是看官刚好在看到这篇文章之后不妨尝试一下,引入System.Text.Encoding.CodePages这个Nuget包,这样就能够解决这个问题了。        对于N
                                    希望能够帮助你们,这个问题也困扰了我很久,api文档描述的很浅,开发者论坛上面也有很多人遇到了这个问题。成功案例:使用 MultipartEntityBuilder 类上传。2、头部head设置文件名称,设置字符编码utf-8。1、使用url编码将文件名称转码后上传。使用的jar包是httpClient。