重定向输出的编码无效

本文关键字:无效 编码 输出 重定向 | 更新日期: 2023-09-27 18:04:45

操作系统Windows, c#。我有一个输出编码的问题。

App.Document doc = cad.DocumentManager.MdiActiveDocument;
if (doc != null)
    doc.Editor.WriteMessage("'nProcess started. Please, wait...'n");
String exeName = Path.Combine(curDir, "recovery");
Process proc = new Process();            
ProcessStartInfo info = new ProcessStartInfo();
info.CreateNoWindow = true;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
// info.StandardOutputEncoding = Encoding.GetEncoding(1251);
info.StandardOutputEncoding = Console.OutputEncoding;
info.FileName = exeName;
info.Arguments = String.Format("{0} -clear", @"%zipDir%'acad_R17.2.zip");
proc.StartInfo = info;
proc.Start();
String outputText = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
if (doc != null) {
    doc.Editor.WriteMessage(outputText);
    doc.Editor.WriteMessage(Environment.NewLine);                
    doc.Editor.WriteMessage("Operation is complete.");
    doc.Editor.WriteMessage(Environment.NewLine);
}

输出结果:

复苏;(c)安德烈·布什曼,2013

ЋЎа Ў®вЄ Є™«®Ј "%acad_R17.2%"。_«Ґ¬Ґ - : AutoCAD 2009/;——Ґ«Ґў®©Є *«®Ј: C:'Program Files' Autodesk;ЋиЁЎЄ: ЋвЄ§-®¤®бвгЇҐ Ї®ЇгвЁ"acad.CUI"。ЋЎа Ў®вЄ Є®Ј"%rmb_acad_R17.2%"。ЋЎа Ў®вЄ Є™«®Ј"% local_acad_R17.2%"。ЋЎа Ў®вЄ Є™«®Ј "%allUsers_acad_R17.2%"。ЋЎа Ў®вЄ Є®Ј"%shared_acad_R17.2%"。_«Ґ¬Ґ - : Autodesk共享/;-Ґ«Ґў®©Є «®Ј: C:'Program Files'Common文件;ЋиЁЎЄ: ЋвЄ§-®¤®бвгЇҐЇ®ЇгвЁ"C: ' Program Files '共同文件' Autodesk '"。ЋЎа Ў®вЄ Є «®Ј "%ext_acad_R17.2%".

但是如果我通过cmd.exe启动recovery.exe,在控制台中我看到正确的文本。我怎样才能通过我的代码得到有效的文本?

重定向输出的编码无效

我找到了答案。两种变体:

  1. GetOEMCP
  2. CultureInfo.CurrentCulture.TextInfo.OEMCodePage