.NET Core调用Encoding.GetEncoding()挂起

时间:2018-05-30 14:51:08

标签: .net .net-core

我打电话给下面这几行。电话无限地挂起。

Encoding.GetEncoding(1251);
Encoding.GetEncoding("Windows-1251");

我正在使用:

  • VS 2017 15.7.2
  • dotnet --version> " 2.1.201"
  • Windows 10

1 个答案:

答案 0 :(得分:3)

该方法不会阻止。它很可能抛出,其余代码处理异常的方式使代码看起来像是阻塞的。也许某个地方有一个catch {}

来自Character Encodings in .NET

中的.NET Core说明
  

默认情况下,.NET Core不提供除代码页28591和Unicode编码之外的任何代码页编码,例如UTF-8和UTF-16。但是,您可以将以.NET为目标的标准Windows应用程序中的代码页编码添加到您的应用程序中。有关完整信息,请参阅CodePagesEncodingProvider主题。

由于.NET和Windows已经使用UTF16并且几乎所有网站,REST API,文件都使用UTF8,所以如此奇怪。

如果您尝试使用简单的控制台应用程序:

static void Main(string[] args)
{
    var enc=Encoding.GetEncoding(1251);
    Console.WriteLine(enc);
    Console.WriteLine("Hello World!");
}

你会得到一个例外:

Unhandled Exception: System.NotSupportedException: No data is available for encoding 1251. 
For information on defining a custom encoding, see the documentation for the 
Encoding.RegisterProvider method.
   at System.Text.Encoding.GetEncoding(Int32 codepage)
   at encodingtest.Program.Main(String[] args) in H:\Projects\encodingtest\Program.cs:line 11

您可以通过添加System.Text.Encoding.CodePages包并注册它来安装其他代码页:

static void Main(string[] args)
{
   Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
   var enc=Encoding.GetEncoding(1251);
   Console.WriteLine(enc);
   Console.WriteLine("Hello World!");
}

这次申请不会抛出。