【问题标题】:Does Encoding.UTF8.GetBytes() create a BOM?Encoding.UTF8.GetBytes() 是否创建 BOM?
【发布时间】:2018-04-07 21:15:39
【问题描述】:

我正在用这个发出 HTTP POST 请求:

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

到目前为止,这似乎工作正常,但我不确定这是否总是有效,因为 Encoding.UTF8 表示 UTF8 WITH BOM。当我使用StreamWriter 创建本地文件时,请始终使用与 new UTF8Encoding(false) 相同的默认编码,以便写入 WITHOUT BOM。所以想知道调用GetBytes()方法是否也是如此。

在这种情况下,上下线没有区别吗?

byte[] postBuffer = new UTF8Encoding().GetBytes(postStr);

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

【问题讨论】:

  • 这是对您问题的回答吗? stackoverflow.com/a/4414118/2395747
  • 不是这个意思。在 Windows 上,BOM 对于文件来说非常重要,它可以让对文件一无所知的应用程序仍然可以正确解释它。网络协议并非如此,因为两端需要就流内容达成一致。对于 http,标头决定了编码。你会依赖,比如说,HttpWebResponse.ContentEncoding
  • @wmioduszewski 谢谢,这个答案也有帮助!
  • @HansPassant 谢谢谢谢! :)

标签: c# encoding byte-order-mark


【解决方案1】:

GetBytes 方法从不返回以 BOM 开头的字节流。 可以使用GetPreAmble 方法检索BOM,当编码器实例化为false 时,该方法不返回任何内容。

有关详细信息,请参阅Microsoft Documentation 上的大量备注部分。

【讨论】:

    猜你喜欢
    • 2012-04-02
    • 1970-01-01
    • 2018-01-06
    • 2016-09-12
    • 2013-06-04
    • 2021-06-22
    • 2018-06-27
    相关资源
    最近更新 更多