在测试中捕获控制台应用程序输出时的编码问题

Jon*_*yMC 6 c# encoding system.diagnostics console-application

我试图通过使用System.Diagnostics.Process在测试中运行它来捕获控制台应用程序的输出.我遇到字符编码问题."£"在测试中显示为"œ",但是当我运行控制台应用程序时,它正确显示为"£".

如果我设置Console.Out.Encoding = Encoding.Default,它在测试中有效,但在正常运行时无法正常显示.

这里发生了什么,我该如何解决?

wal*_*wal 5

你需要设置StandardOutputEncoding你的ProcessStartInfo目标在你的测试用例:

var process = new Process();
var startInfo = new ProcessStartInfo(@"yourapp.exe");
startInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
Run Code Online (Sandbox Code Playgroud)

您可以通过运行在控制台应用中找到您正在使用的CodePage

Console.WriteLine(Console.Out.Encoding.CodePage); 
Run Code Online (Sandbox Code Playgroud)

返回850(西欧DOS)

您还可以将该BodyName属性用作arg,GetEncoding即:

startInfo.StandardOutputEncoding = Encoding.GetEncoding("ibm850");
Run Code Online (Sandbox Code Playgroud)