C# Streamwriter未将命令正确写入网络流

C# Streamwriter未将命令正确写入网络流,c#,streamwriter,networkstream,C#,Streamwriter,Networkstream,我不确定这是如何发生的,但我有一段代码可以简化为以下内容: var tcpClient = CreateAndConnect(); var networkStream = tcpClient.GetStream(); var streamWriter = new StreamWriter( networkStream, Encoding.UTF8 ); var msg = GetMessage(); //if i write this msg directly with this co

我不确定这是如何发生的,但我有一段代码可以简化为以下内容:

var tcpClient = CreateAndConnect();
var networkStream = tcpClient.GetStream();   
var streamWriter = new StreamWriter( networkStream, Encoding.UTF8 );
var msg = GetMessage(); 

//if i write this msg directly with this code block i will get a successful response
var bytes = Encoding.UTF8.GetBytes( msg );
await networkStream.WriteAsync( bytes, 0, bytes.Length ); 

//if instead i write to the streamwriter and flush it fails
streamWriter.Write( msg  );
streamWriter.Flush();

我检查了wireshark中发送的数据包,它们实际上相差3个字节。我对数据包的了解还不够,不知道到底有什么区别,尽管我可以肯定地说,完整的信息都在这两种语言中。

正如评论中指出的,这个问题与字节顺序标记有关,它是一个3字节的代码,在字符串前面加上,表示编码是UTF8


静态编码类encoding.UTF8将字节顺序标记前置为UTF8字符串。修复方法是通过new UTF8Encoding()实例化一个新的编码类,该类不添加字节顺序标记,除非被明确告知。

3字节?也许是0xEF 0xBB 0xBF?然后是UTF8编码的BOM(字节顺序标记)。另见