System.Text.Encoding.UTF8 是一个静态实例,它省略了 BOM,而 new UTF8Encoding(false) 创建的实例是含有 BOM 的。
BOM,即 Byte Order Mark,也即字节流标记,它是用来让应用程序识别所用的编码的。UTF-8 的 BOM 是 0xEFBBBF。
public UTF8Encoding(bool encoderShouldEmitUTF8Identifier),可以看出,如果我们指定参数为 false,表示不省略 BOM;如果为 true,则和 Encoding.UTF8 一样了。注意,在 msdn 上似乎把这个参数的意思解释反了。有兴趣的朋友可以看一看:http://msdn.microsoft.com/zh-cn/community/s064f8w2.aspx。