重定向输出的编码无效

时间:2013-03-20 11:35:07

标签: c# .net encoding

OS 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)Andrey Bushman,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 Shared /;   -Ґ«Ґў®©«««®:C:\ Program Files \ Common Files; ЋиЁЎЄ:ЋвЄ§®ў   ¤®бвгЇҐЇҐЇЇгвЁ“C:\ Program Files \ Common Files \ Autodesk Shared \”。   ЋЎЎЄЄ««Ј“%ext_acad_R17.2%”。

但是如果我通过cmd.exe启动recovery.exe,在控制台中我会看到正确的文本。如何通过我的代码获取有效文本?

此致

1 个答案:

答案 0 :(得分:0)

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

  1. GetOEMCP
  2. CultureInfo.CurrentCulture.TextInfo.OEMCodePage
  3. 两者都很好。