Проблема с кодировкой при захвате вывода консольного приложения в тесте - PullRequest
6 голосов
/ 28 января 2012

Я пытаюсь перехватить вывод из консольного приложения, запустив его в тесте с использованием System.Diagnostics.Process.У меня проблемы с кодировкой символов.«" »Отображается как« œ »в тесте, но когда я запускаю консольное приложение, оно корректно отображается как« "».

Если я установил Console.Out.Encoding = Encoding.Default, он работаетв тестах, но не отображается должным образом при нормальной работе.

Что здесь происходит и как я могу это исправить?

Ответы [ 2 ]

5 голосов
/ 28 января 2012

Вам нужно установить StandardOutputEncoding для вашего ProcessStartInfo объекта в вашем тестовом случае:

var process = new Process();
var startInfo = new ProcessStartInfo(@"yourapp.exe");
startInfo.StandardOutputEncoding = Encoding.GetEncoding(850);

Вы можете узнать, какую кодовую страницу вы используете в своем консольном приложении, запустив

Console.WriteLine(Console.Out.Encoding.CodePage); 

, который возвращает 850 (западноевропейский DOS)

Вы также можете использовать свойство BodyName в качестве аргумента для GetEncoding, то есть:

startInfo.StandardOutputEncoding = Encoding.GetEncoding("ibm850");
1 голос
/ 28 января 2012

Я думаю, вы на правильном пути. В качестве теста я выполнил этот код:

Console.WriteLine(Encoding.Default.EncodingName);           
Console.WriteLine(Console.Out.Encoding.EncodingName);   

При запуске как консольное приложение выводит:

Western European (Windows)
OEM United States

При запуске в качестве приложения Windows выводит:

Western European (Windows)
Western European (Windows)

Я подозреваю, что при чтении из вывода консоли от тестового бегунка вам нужно будет настроить кодировку вашего считывателя так, чтобы она соответствовала кодировке, в которую записан вывод, вероятно, в Западной Европе (Windows), хотя я не могу знать точно.

...