Encoding.UTF8.GetBytes()会创建BOM吗?

6

我正在使用这个来进行HTTP POST请求:

byte[] postBuffer = Encoding.UTF8.GetBytes(postStr);

到目前为止,这似乎运作良好,但我不确定这是否总是有效,因为 Encoding.UTF8 意味着使用带有 BOM 的 UTF8。当我使用 StreamWriter 创建本地文件时,总是使用默认编码,该编码与 new UTF8Encoding(false) 相同,以便不带 BOM 写入。所以想知道调用 GetBytes() 方法是否也是如此。
在这种情况下,上面和下面一行之间没有任何区别吗?
byte[] postBuffer = new UTF8Encoding().GetBytes(postStr);

我自己测试了几次,但仍不确定100%,所以在这里询问。


1
这是对你问题的回答吗?https://dev59.com/Pm855IYBdhLWcg3wUSgW#4414118 - wmioduszewski
2
这并不是它的意思。在Windows上,BOM对于使不知道文件的应用程序正确解释它非常重要。但对于网络协议来说并非如此,因为两端都需要同意流内容。而对于HTTP,头部规定了编码方式。你可以依赖于例如HttpWebResponse.ContentEncoding。 - Hans Passant
@wmioduszewski 谢谢,那个答案也很有帮助! - Jenix
@HansPassant 谢谢你,谢谢你! :) - Jenix
1个回答

5
GetBytes方法不会返回以BOM为前缀的字节流。可以使用GetPreAmble方法检索BOM,当编码器实例化为false时,该方法返回空值。
有关更多详细信息,请参见Microsoft Documentation中的广泛说明部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接