C# WinForms 进程编码问题

标签 c# winforms encoding utf-8 process

我正在用 C# 编写 Windows 窗体应用程序 我有一个运行 cmd 命令并返回其输出的进程对象。

Process Pro = new Process();
Pro.StartInfo.FileName = "cmd.exe";
Pro.StartInfo.Arguments = "<Dos Command here>";
Pro.StartInfo.CreateNoWindow = true;
Pro.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
Pro.StartInfo.RedirectStandardOutput = true;
Pro.StartInfo.UseShellExecute = false;
Pro.Start();

效果不错!但是,如果命令的输出不是 ASCII(在我的例子中是希腊语),则输出是随机符号。肯定是编码问题。 如果我在控制台应用程序上运行相同的代码,一切都会顺利进行。

我尝试将基本流读取为 UTF-8,但没有成功!

System.IO.StreamReader Rdr = new System.IO.StreamReader(Pro.StandardOutput.BaseStream, Encoding.UTF8);

有什么方法可以在 winform 应用程序中正确读取输出? 谢谢!

最佳答案

真正的解决方案是基于此: unicode-characters-in-windows-command-line-how 在这里检查: Wiki code page 对于您需要的代码页。

你也可以做一个丑陋的黑客,将命令写入批处理文件(f.e foo.bat) 然后将其作为 foo.bat > log.txt 运行 然后你可以从 log.txt 中读取输出。

关于C# WinForms 进程编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7584750/

相关文章:

c# - 如果在运行任务之前创建新的表单实例,则等待任务会挂起

python - 如何知道 Python 中文件的编码?

encoding - 如何在呈现的 vue 中转义 html 占位符属性

PHP 5.6 编码 latin1 MySQL 编码

c# - 运算符 '>=' 不能应用于 datagridview 单元格值中类型为 'object' 和 'int' 的操作数

c# - TDD:.NET 遵循 TDD 原则,模拟/不模拟?

c# - DataSource 中的更新重置了 CheckedListBox 复选框

c# - 不使用数据库数据可以使用DataGridView吗?

c# - 在 F# 中实现 C# 事件处理程序

c# - 以编程方式确定是否启用了 Windows 8 安全启动