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

时间:2013-06-07 22:47:30

标签: c# utf-8 character-encoding

有人可以解释我有什么不同的赌注。 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编码,但是其中一种不起作用?

1 个答案:

答案 0 :(得分:14)

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

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

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

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

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

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