在测试中捕获控制台应用程序输出时出现编码问题
本文关键字:编码 问题 输出 应用程序 测试 控制台 | 更新日期: 2023-09-27 18:21:46
我正试图通过在使用System.Diagnostics.Process的测试中运行控制台应用程序来捕获输出。我在字符编码方面遇到了问题。"£"在测试中显示为"œ",但当我运行控制台应用程序时,它正确显示为"£"。
如果我设置Console.Out.Encoding=Encoding.Default,它在测试中有效,但在正常运行时不会正确显示。
这里发生了什么,我该如何解决?
您需要在测试用例中的ProcessStartInfo
对象上设置StandardOutputEncoding
:
var process = new Process();
var startInfo = new ProcessStartInfo(@"yourapp.exe");
startInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
你可以通过运行在控制台应用程序中找到你正在使用的CodePage
Console.WriteLine(Console.Out.Encoding.CodePage);
返回850(西欧DOS)
您也可以使用BodyName
属性作为GetEncoding
的参数,即:
startInfo.StandardOutputEncoding = Encoding.GetEncoding("ibm850");
我认为你走在了正确的轨道上。作为测试,我执行了以下代码:
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),尽管我不能确定。