Net core解压一个非ASCII符号的文件

Net core Unzip a file with non-ASCII symbols

我的任务是从 zip 存档中提取文件。不幸的是,正如我从此处的另一个问题中发现的那样,win10 中的 windows 资源管理器仍然使用 cp866 对存档文件内的文件名进行编码。 .NET Core 不支持此代码页,因此提取存档会导致不可读的符号。 Aspose.Zip 让我遇到了完全相同的问题。有没有办法在 .net core 3.1 堆栈中解决这个问题?也许在 .net 5 中?

默认情况下,.NET Core 3.1 和 .NET 5+ 都包含有限的开箱即用编码集。但是,您可以仅通过成对的代码行来解决此问题:您只需要注册一个自定义编码提供程序(请参阅 https://docs.microsoft.com/en-us/dotnet/api/system.text.codepagesencodingprovider?view=net-5.0)然后瞧 - 通过其编号获取所需的编码:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var encoding = Encoding.GetEncoding(866);

然后您可以轻松地从 zip 中提取文件,在 Win Explorer 中存档,没有非 ascii 符号问题。