【发布时间】: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