如何在C#中获取CMD /控制台编码

我需要指定正确的代码页来打包带有zip库的文件。 我看,我需要指定控制台编码(在我的情况下为866)。

C:\Users\User>mode Status for device CON: ---------------------- Lines: 300 Columns: 130 Keyboard rate: 31 Keyboard delay: 1 Code page: 866 <- I need to get this value in C# code 

Console.OutputEncoding返回1251,这不是我需要的。

谢谢,

亚历克斯

更新1:显然,在cmd.exe中执行“mode”并解析输出应该有效但看起来太粗鲁了。 我正在寻找.NET解决方案。

更新2:应用程序是Windows窗体应用程序,而不是控制台应用程序。

控制台模式应用程序的默认代码页由系统区域设置决定。 控制面板+区域和语言,管理选项卡,更改系统区域设置。 您的Windows代码页是西里尔语,您的控制台代码页也是如此,因此该代码有可能正常工作:

  int lcid = GetSystemDefaultLCID(); var ci = System.Globalization.CultureInfo.GetCultureInfo(lcid); var page = ci.TextInfo.OEMCodePage; // etc.. [System.Runtime.InteropServices.DllImport("kernel32.dll")] public static extern int GetSystemDefaultLCID(); 

避免编写这样的代码,8位文本编码是一个雷区。 当然没有任何合理的理由来运行控制台模式的zip程序,有很多.NET zip库可用。

你需要Encoding.CodePage属性:

 var codePage = Console.OutputEncoding.CodePage; 

这将为您提供代码页值(在您的示例中为866)。