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

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

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

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

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

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

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


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

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

5   голосов , оценка 5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы