Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) 不添加额外的编码提供者

Roj*_*Gh. 7 c# encoding codepages nuget-package .net-core

我正在开发一个netcoreapp2.0控制台应用程序,我需要从 .NET 访问整个编码包。

我已经将此页面中System.Text.Encoding.CodePages Version=4.4.0Nuget 包添加到我的项目中,并多次清理/恢复了该项目。

但是我无法获得我需要的额外编码。

以下代码:

Console.WriteLine(Encoding.GetEncodings().Length);
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Console.WriteLine(Encoding.GetEncodings().Length);
Run Code Online (Sandbox Code Playgroud)

返回:

8
8
Run Code Online (Sandbox Code Playgroud)

并且没有向Encoding类添加额外的编码。

这些是我在项目中的所有参考资料:

<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="2.0.0" />
<PackageReference Include="System.Data.HashFunction.xxHash" Version="2.0.0-ci-00012" />
<PackageReference Include="Nager.PublicSuffix" Version="1.1.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.4.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" />

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
Run Code Online (Sandbox Code Playgroud)

我在这里做错了吗?

更新

再次重新安装 .NET Core SDK 2.0.2 后,事情开始正常工作,我可以使用扩展的编码代码页 usingEncoding.GetEncoding()方法,但是Encoding.GetEncodings()仍然返回初始的 8 个编码代码页。

Roj*_*Gh. 9

2022 年 8 月更新:

感谢zapoo的评论,我们知道虽然 .net Framework 4.8 不需要该解决方案,但 .net 6.0 需要它


我将其添加为关于Gabriel Rainha建议的答案,该建议将来也可能对其他人有所帮助。

我清理了 Nuget 缓存,修复了“.NET Core SDK 2.0.2”安装,执行了“解决方案和项目清理”并重建了我的项目,代码Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)开始正常工作。

现在我可以使用该方法访问额外的代码页,但是在添加额外的编码后,Encoding.GetEncoding()我仍然从方法中获得相同的编码列表。Encoding.GetEncodings()

从我的角度来看,该Encoding.GetEncodings()方法应该在添加更多编码后返回所有可用的编码。

  • 为什么程序需要这行代码:`Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)`。我也在我的代码中使用了这一行,但不知道为什么有必要 (3认同)