.NET Core不了解Windows 1252,如何修复?

Jos*_*hua 58 vb.net character-encoding windows-1252 .net-core

这个程序在为.NET 4编译时工作正常,但在为.NET Core编译时​​也能正常工作.我理解不支持编码的错误,但不知道如何解决它.

Public Class Program
    Public Shared Function Main(ByVal args As String()) As Integer
        System.Text.Encoding.GetEncoding(1252)
    End Function
End Class
Run Code Online (Sandbox Code Playgroud)

svi*_*ick 109

要做到这一点,你需要注册的CodePagesEncodingProvider从实例System.Text.Encoding.CodePages包.

为此,请安装System.Text.Encoding.CodePages包:

dotnet add package System.Text.Encoding.CodePages
Run Code Online (Sandbox Code Playgroud)

然后(在隐式或显式运行之后dotnet restore),您可以调用:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var enc1252 = Encoding.GetEncoding(1252);
Run Code Online (Sandbox Code Playgroud)

或者,如果您只需要一个代码页,则无需注册即可直接获取:

var enc1252 = CodePagesEncodingProvider.Instance.GetEncoding(1252);
Run Code Online (Sandbox Code Playgroud)

  • @Rich您应该从带有`csproj`的目录中运行它。如果您使用的是 Visual Studio,则还可以使用包管理器代替该命令。 (2认同)
  • 顺便说一句:不应将“CodePagesEncodingProvider.Instance.GetEncoding”与变量输入一起使用。https://learn.microsoft.com/en-us/dotnet/api/system.text.codepagesencodingprovider?view=netcore-3.1 说:“你不应该调用 EncodingProvider.GetEncoding 重载”。原因可能是“EncodingProvider”不会为您提供所有编码,而可能只会提供附加编码(例如,您不会获得 ISO-8859-1 代码页,因为“CodePagesEncodingProvider.Instance.GetEncoding(28591)”给出“null”)。 (2认同)

小智 7

请写出:

<ItemGroup>
    <PackageReference Include="System.Text.Encoding.CodePages" Version="4.3.0" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

在csproj.

在包控制台中写入'dotnet restore',恢复程序集.

并使用此代码进行示例:

public class MyClass
{
    static MyClass()
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    }
}
Run Code Online (Sandbox Code Playgroud)