我使用.NET ProcessStartInfo.RedirectStandardOutput
和Process.BeginOutputReadLine
来捕获另一个程序的标准输出(具体来说,youtube-dl.exe)并将它们保存到字符串变量中。
但结果变量只包含我的语言的常用字符,如繁体中文和英文字母;带有重音符号的韩语或拉丁字母等字符就会消失。
我File.WriteAllText
- 修改了结果变量并使用多个文本编辑器检查了文件,因此我确定它们已经丢失,而不是它们存在且仅仅是不可显示的控制台窗口。
在Windows命令提示符中明确执行youtube-dl会显示包含这些外来字符的完整消息。
我的youtubeDL_process.OutputDataReceived
只是:
(s, e) => {
if(!string.IsNullOrWhiteSpace(e.Data)) this._filename = e.Data;
}
如何使带有外来字符的重定向标准输出字符串完整,就像在命令提示符中直接生成的一样?
答案 0 :(得分:0)
您直接将输出直接保存到文件中。试试这个
youtubeDL_process.OutputDataReceived += (s, e) => CaptureOutput(e.Data);
youtubeDL_process.Start();
youtubeDL_process.BeginOutputReadLine();
private void CaptureOutput(string s)
{
Console.WriteLine("\r\n" + s);
//write fileChunks here using a StreamWriter....
}
//因为CaptureOutput以字符串形式接收您的数据,尝试使用其他类型(.eg二进制文件)以便不删除字符串中的特殊字符(外来字符),还检查一些UTF8编码或任何其他编码方法文档。