Net core 解压缩带有非 ASCII 符号的文件

问题描述

我有一项任务是从 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);

然后您可以轻松地从压缩文件中提取文件,在 Win Explorer 中存档,而不会出现非 ASCII 符号问题。