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

2024-05-23

我需要指定正确的代码页来使用 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,这不是我需要的。

Thanks,

Alex

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

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


The default控制台模式应用程序的代码页由系统区域设置确定。控制面板 + 区域和语言、管理选项卡、更改系统区域设置。您的 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();

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中获取 CMD/控制台编码 的相关文章

随机推荐