如何在 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,这不是我需要的。
谢谢,
Alex
更新 1: 显然,在 cmd.exe 中执行“mode”并解析输出应该可以工作,但看起来太粗鲁了。我正在寻找 .NET 解决方案。
更新 2: 该应用程序是 Windows 窗体应用程序,而不是控制台应用程序。
I need to specify the correct codepage to pack the files with zip library. As I see, I need to specify console encoding (866 in my case).
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 returns 1251, which is not what I need.
Thanks,
Alex
Update 1: Obviously, execute "mode" in cmd.exe and parse output should work but it seems too rude. I'm looking for .NET solution.
Update 2: The application is windows forms application, not a console app.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
控制台模式应用程序的默认代码页由系统区域设置决定。控制面板 + 区域和语言、管理选项卡、更改系统区域设置。您的 Windows 代码页是西里尔文,您的控制台代码页也是如此,因此该代码很有可能会起作用:
请避免编写这样的代码,8 位文本编码是一个雷区。当然没有任何合理的理由必须运行控制台模式 zip 程序,有大量可用的 .NET zip 库。
The default code page for a console mode app is determined by the system locale. Control Panel + Region and Language, Administrative tab, Change System Locale. Your Windows code page is Cyrillic, so is your console code page so there's a reasonable chance that this code will work:
Do avoid writing code like this, 8-bit text encodings are a mine field. There certainly isn't any decent reason to have to run a console-mode zip program, there are plenty of .NET zip libraries available.
您需要
Encoding.CodePage
< /a> 属性:这将为您提供一个代码页值(在您的示例中为 866)。
You need
Encoding.CodePage
property:which will give you a code page value (866 in your example).
对我来说852(拉丁语II):
for me 852 (Latin II):