【问题标题】:Capturing output from standard io encoding?从标准 io 编码捕获输出?
【发布时间】:2013-08-07 12:26:40
【问题描述】:

我正在将应用程序的输出传送到我的 .NET 应用程序中。

编码有点奇怪。 字母 ÅÄÖ 显示为 ├Ñ ├ñ ├Â

我尝试从各种不同的编码来回转换,但没有任何成功。 有人知道这里应该如何正确转换字符串吗?

例如该应用程序的文档说输出是 UTF8,所以我试过这个:

byte[] encodedBytes = Encoding.UTF8.GetBytes(theOutput);
var res = Encoding.Default.GetString(encodedBytes);

结果不正确。

编辑: 代码:

var processStartInfo = new ProcessStartInfo
{
   CreateNoWindow = true,
   RedirectStandardOutput = true,
   RedirectStandardInput = true,
   UseShellExecute = false,
   Arguments = a,
   FileName = path + "\\phantomjs.exe"
};

var process = new Process
{
   StartInfo = processStartInfo,
   EnableRaisingEvents = true
};

//capturing output here
process.OutputDataReceived += 
   (sender, args) => outputBuilder.Append(args.Data);

process.Start();
process.BeginOutputReadLine();
process.WaitForExit(20000);
process.CancelOutputRead();

【问题讨论】:

  • 你是如何获得这个输出的?请提供更多上下文。使用不同的编码将字符串转换为字节并返回几乎总是是个坏主意。
  • @Mgetz:很可能是这样——但我正在等待找出答案。 (只是让其他应用程序写入文件将是控制事物的好方法......)
  • @JonSkeet 是的,如果我将相同的命令传送到文件,输出看起来是正确的......例如phantomjs.exe myscript.js > foo.txt
  • @RogerAlsing 看起来正确如何?它有什么编码的文件?如果您尝试使用“高级”编辑器(例如 Notepad++)打开它,文件是否被识别为 ANSI 或 UTF-8?
  • 我看到你来自瑞典......你知道你的代码页吗?对于 Windows,您应该是 1252,对于 DOS 应该是 865(您可以尝试在命令提示符下启动 chcp 吗?)

标签: c# utf-8 character-encoding redirectstandardoutput


【解决方案1】:

找到了解决办法。 你可以设置

   processStartInfo.StandardOutputEncoding = Encoding.UTF8;

这使它正确输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 2021-05-21
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多