Кодировка из DOS(CP-886) в utf-8 - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Есть программа которая передает в командную строку команду, и считывает ответ.
private void button1_Click(object sender, EventArgs e)
        {
            string a;
            Process p = new Process();
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.FileName = "cmd.exe";            
            p.StartInfo.Arguments = "/C " + textBox1.Text;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.RedirectStandardOutput = true;            
            p.Start();
            a = p.StandardOutput.ReadToEnd();
                                    
            //Первый вариант
            /*var fromEncodind = Encoding.GetEncoding("CP-886");//из какой кодировки
            var bytes = fromEncodind.GetBytes(a);
            var toEncoding = Encoding.GetEncoding("UTF-8");//в какую кодировку
            a = toEncoding.GetString(bytes);*/
            
            //второй вариант
            /*Encoding dos = Encoding.GetEncoding("CP886");
            Encoding win = Encoding.GetEncoding(a);
 
            byte[] utfArr = dos.GetBytes(a);
            byte[] winArr = Encoding.Convert(win, dos, utfArr);
            string winLine = win.GetString(winArr);*/
 
            //третий вариант
            /*using (var sw = new System.IO.StreamWriter(System.IO.File.Create(@"C:\file.txt"), 
                System.Text.Encoding.GetEncoding("CP-886")))sw.WriteLine(a);*/
            label1.Text = a;
            p.WaitForExit();
            
        }
Но проблема в том что если ввести в команду ipconfig, то то что в DOS'e будет написано кириллицей, в программе отобразится "кракозябрами". Пробовал разными (по сути одними и теми же) методами перекодировать из CP-886 в UTF-8, но во время выполнения программы выскакивают ошибки. В первом варианте среда VS2013 ругается на строку
var fromEncodind = Encoding.GetEncoding("CP-886");
Во втором на строку
Encoding dos = Encoding.GetEncoding("CP886");
В третьем в общем то тоже самое
var sw = new System.IO.StreamWriter(System.IO.File.Create(@"C:\file.txt"), 
                System.Text.Encoding.GetEncoding("CP-886"))
Проблемы возникают при нажатии на button1.
Говорит что
Необработанное исключение типа "System.ArgumentException" в mscorlib.dll Дополнительные сведения: Название кодировки "CP-886" не поддерживается. Сведения об определении пользовательских кодировок см. в документации на метод Encoding.RegisterProvider.

Решение задачи: «Кодировка из DOS(CP-886) в utf-8»

textual
Листинг программы
p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(866);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 5 из 5
Похожие ответы