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
相关产品推荐
相关产品推荐

