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

设置ProcessStartInfo.StandardInputEncoding为UTF8时输入开头乱码问题求助

乱码原因与解决方法

乱码产生的原因

你看到的∩╗┐是UTF-8 BOM(字节顺序标记)的可视化乱码。.NET中默认的Encoding.UTF8会在首次向流写入内容时自动添加BOM,但Windows命令行(cmd/powershell)无法识别这个标记,会把它当作命令的一部分解析,导致首次输入的echo test变成了∩╗┐echo test,系统自然识别不了这个命令。而第二次输入时,流已经处于打开状态,不会重复添加BOM,所以命令能正常执行。

保留UTF-8输入的解决方法

核心是使用不带BOM的UTF-8编码替代默认的Encoding.UTF8。具体做法是创建UTF8Encoding实例时,将encoderShouldEmitUTF8Identifier参数设为false,这样就不会自动添加BOM了。

修改代码示例:

// 原来的代码(会产生BOM)
// processStartInfo.StandardInputEncoding = Encoding.UTF8;

// 修改后的代码(无BOM的UTF-8)
processStartInfo.StandardInputEncoding = new UTF8Encoding(false);

这样设置后,既可以正常传递Unicode字符,又不会在命令开头插入BOM导致乱码,首次输入命令也能正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:54:51