我正在开发一个 netcoreapp2.0
控制台应用程序,我需要从 .NET 访问整个编码包。
我已经添加了来自 this page 的 System.Text.Encoding.CodePages Version=4.4.0
Nuget 包到我的项目并多次清理/恢复项目。
但是我无法获得我需要的额外编码。
以下代码:
Console.WriteLine(Encoding.GetEncodings().Length);
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Console.WriteLine(Encoding.GetEncodings().Length);
返回:
8
8
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" />
我是不是做错了什么?
更新
再次重新安装 .NET Core SDK 2.0.2 后,一切开始正常运行,我可以使用 Encoding.GetEncoding()
方法使用扩展编码代码页,但是 Encoding .GetEncodings()
仍然返回最初的 8 个编码代码页。
最佳答案
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()
方法应该在添加更多编码后返回所有可用的编码。
关于c# - Encoding.RegisterProvider(CodePagesEncodingProvider.Instance) 不添加额外的编码提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46994907/