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

