Как получить CMD / консольную кодировку в C # - PullRequest
9 голосов
/ 06 мая 2011

Мне нужно указать правильную кодовую страницу, чтобы упаковать файлы в 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: Очевидно, что нужно выполнить «mode» в cmd.exe, и вывод синтаксического анализа должен работать, но он кажется слишком грубым.Я ищу решение .NET.

Обновление 2: Приложение является приложением Windows Forms, а не консольным приложением.

Ответы [ 2 ]

16 голосов
/ 06 мая 2011

Кодовая страница по умолчанию *1002* для приложения в режиме консоли определяется системным языком. Панель управления + Регион и язык, вкладка «Администрация», «Изменить язык системы». Ваша кодовая страница 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-библиотек.

2 голосов
/ 06 мая 2011

Вам необходимо Encoding.CodePage свойство:

var codePage = Console.OutputEncoding.CodePage;

, которое даст вам значение кодовой страницы (866 в вашем примере).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...