System.IO.IOException:参数不正确。当Console.OutputEncoding = Encoding.GetEncoding(“ GB2312”);

时间:2018-08-29 11:25:13

标签: c# .net amazon-ec2 encoding .net-core

代码:

// dotnet core version
// install-package System.Text.Encoding.CodePages
EncodingProvider encodingProvider = CodePagesEncodingProvider.Instance;
Encoding.RegisterProvider(encodingProvider);
Console.OutputEncoding = Encoding.GetEncoding("GB2312");

// full dotnet framework version
static void Main(string[] args)
{
    try
    {
        var s = Encoding.GetEncoding(936);
        Console.OutputEncoding = s;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
        Console.WriteLine(ex.Message);
    }
    Console.WriteLine("中文");
    Console.ReadLine();
}

当我尝试在控制台上设置OutputEncoding时,抛出IOException:参数不正确。这在我的AWS EC2实例(Windows Server 2016 Datacenter)上发生,但在我的本地Windows 10专业版计算机上运行正常。我已经尝试了dotnet核心和完整的dotnet框架。

1 个答案:

答案 0 :(得分:1)

感谢DmytroMukalov指出了正确的方向。这是在AWS EC2 Windows实例上启用GB2312 / 936代码页的方法

https://superuser.com/questions/692709/why-sometimes-the-codepage-is-invalid-in-console

  

在Windows 7中,仅当Windows系统范围的非Unicode语言环境设置为日语时,才可以设置932代码页(在需要日语消息之前,不需要安装其他语言支持;))。不幸的是,设置区域设置后,您需要重新启动Windows。我想您提到的其他代码页就是这种情况。重新启动后,您的默认语言环境将为932,并且您还将拥有日语目录分隔符

如何查看和更改系统区域设置以使用我选择的语言

  • 点击“开始”,然后点击“控制面板”
  • 点击时钟,语言和地区
  • Windows 10,Windows 8:单击区域
  • 点击“管理”标签
  • 在“非Unicode程序的语言”部分下,单击“更改系统区域设置”,然后选择所需的语言。
  • 重新启动计算机以应用更改。