You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio C#交互式窗口执行外部命令输出乱码问题

解决Visual Studio C#交互式窗口执行外部命令输出乱码的问题

问题根源是编码不匹配:Windows系统下的外部命令(比如ping)默认用GBK编码输出内容,但C#交互式窗口的默认输出编码是UTF-8,直接读取时会把GBK内容按UTF-8解析,导致乱码。而普通C#程序启动的独立控制台会自动适配系统编码,所以显示正常。

直接用以下代码即可解决:

var psi = new ProcessStartInfo("ping.exe", "baidu.com")
{
    UseShellExecute = false,
    RedirectStandardOutput = true,
    StandardOutputEncoding = System.Text.Encoding.Default // 自动匹配系统默认编码
};

using var process = Process.Start(psi);
var output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
Console.WriteLine(output);

关键说明:

  • UseShellExecute = false:必须关闭Shell执行模式,才能启用输出重定向,让我们能直接读取外部进程的输出内容。
  • StandardOutputEncoding = Encoding.Default:Encoding.Default会自动获取当前Windows系统的默认编码(中文环境就是GBK),确保和外部命令的输出编码一致,避免乱码。如果需要固定编码,也可以直接写Encoding.GetEncoding("GBK")。
  • 读取输出后用Console.WriteLine输出到交互窗口,此时内容已经是正确编码的字符串,能正常显示。

内容的提问来源于stack exchange,提问作者lajawi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:18:10