在C#中重定向包含伪loc(unicode)字符串的ConsoleOutput

Ken*_*enn 5 c# unicode console command-line process

我正在运行一个控制台应用程序(myApp.exe),它将一个伪本地化(unicode)字符串输出到标准输出.如果我在常规命令提示符(cmd.exe)中运行此命令,则unicode数据将丢失.如果我在unicode命令提示符(cmd.exe/u)中运行它或将控制台的属性设置为"Lucida Console",则会保留unicode字符串.

我想在C#中运行此应用程序并将unicode字符串重定向到本地变量.我正在使用RedirectStandardOutput = true的Process对象,但unicode字符串总是丢失.

如何指定保留此unicode信息?

        private static int RunDISM(string Args, out string ConsoleOutput)
        {
            Process process = new Process();
            process.StartInfo.FileName = "myApp.exe";
            process.StartInfo.Arguments = Args;

            try
            {
                process.StartInfo.CreateNoWindow = true;
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.WorkingDirectory = Environment.CurrentDirectory;

                process.Start();
                process.WaitForExit(Int32.MaxValue);
            }
            catch (Exception e)
            {
                WEX.Logging.Interop.Log.Assert("Failure while starting or running process.\nERROR: " + e.Message);
                ConsoleOutput = null;
                return EXITCODE_ERROR;
            }

            ConsoleOutput = process.StandardOutput.ReadToEnd();
            return process.ExitCode;
        } 
Run Code Online (Sandbox Code Playgroud)

Cha*_*lie 3

看起来您需要使用ProcessStartInfo 上的StandardOutputEncoding属性从控制台应用程序更改 StandardOutput 流上的编码。在开始该过程之前,尝试在 try/catch 块中添加以下代码:

process.StartInfo.StandardOutputEncoding = Encoding.Unicode;
Run Code Online (Sandbox Code Playgroud)

您可能需要尝试不同的编码,看看哪种编码最适合您的情况。