Как получить 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: Очевидно, что выполнение "mode" в cmd.exe и синтаксическом анализе должно работать, но кажется слишком грубым. Я ищу .NET-решение.
Обновление 2: Приложение представляет собой приложение Windows Forms, а не консольное приложение.
Ответы
Ответ 1
Кодовая страница по умолчанию для приложения режима консоли определяется по языку системы. Панель управления + Область и язык, вкладка "Администрирование", "Изменить системный язык". Ваша кодовая страница 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, есть много доступных библиотек zip.NET.
Ответ 2
Вам нужно Encoding.CodePage
свойство:
var codePage = Console.OutputEncoding.CodePage;
который даст вам значение кодовой страницы (866 в вашем примере).
Ответ 3
для меня 852 (лат. II):
Encoding consoleEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage);