Encoding.UTF8.GetBytes和UTF8Encoding.Default.GetBytes之间的区别

有人可以解释我有什么不同的赌注。 Encoding.UTF8.GetBytes和UTF8Encoding.Default.GetBytes? 实际上我正在尝试将XML字符串转换为流对象,现在发生的是每当我使用此行时:

MemoryStream stream = new MemoryStream(UTF8Encoding.Default.GetBytes(xml)); 

它给我一个错误“System.Xml.XmlException:给定编码中的无效字符”

但是当我使用这一行时,它工作正常:

  **MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml));** 

即使它在两种情况下似乎都是UTF8编码,但是其中一种是有效的,另一种则不然?

没有UTF8Encoding.Default属性。 当你写这个时,实际上你正在返回基类静态属性Encoding.Default ,它不是UTF8(它是系统的默认ANSI代码页编码)。

因此,两者将返回非常不同的结果 – 因为UTF8Encoding.Default实际上是Encoding.Default ,您将返回与使用ASCIIEncoding.Default或任何其他System.Text.Encoding子类相同的内容。

使用UTF8Encoding的正确方法是使用您创建的实例,例如:

 MemoryStream stream = new MemoryStream((new UTF8Encoding()).GetBytes(xml)); 

以上应提供与以下相同的结果:

 MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml));