0

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) アンドレイ・ブッシュマン、2013

ЋЎа Ў®вЄ Є в «®Ј "%acad_R17.2%". 詳細: AutoCAD 2009/; –�������®© Є в «®Ј: C:\Program Files\Autodesk; . ЋЎа Ў®вЄ Є в «®Ј "%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 を起動すると、コンソールに正しいテキストが表示されます。コードから有効なテキストを取得するにはどうすればよいですか?

よろしく

4

1 に答える 1

0

私は答えを見つけました。2つのバリエーション:

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

どちらも正常に動作します。

于 2013-03-20T13:13:27.917 に答える