C# Encoding.UTF8.GetBytes和UTF8Encoding.Default.GetBytes之间的差异

C# Encoding.UTF8.GetBytes和UTF8Encoding.Default.GetBytes之间的差异,c#,utf-8,character-encoding,C#,Utf 8,Character Encoding,有人能解释一下赌的区别吗。Encoding.UTF8.GetBytes和UTF8Encoding.Default.GetBytes?实际上,我正在尝试将XML字符串转换为流对象,现在的情况是每当我使用这一行时: MemoryStream stream = new MemoryStream(UTF8Encoding.Default.GetBytes(xml)); 它给了我一个错误“System.Xml.XmlException:给定编码中的无效字符” 但当我使用这一行时,它工作得很好:

有人能解释一下赌的区别吗。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
属性。编写此代码时,实际上返回的是基类静态属性,它不是UTF8(它是系统默认的ANSI代码页编码)

因此,这两个函数将返回非常不同的结果-因为
UTF8Encoding.Default
实际上是
编码。Default
,您将返回与使用
asciencoding.Default
或任何其他
System.Text.Encoding
子类相同的结果

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

MemoryStream stream = new MemoryStream((new UTF8Encoding()).GetBytes(xml));
上述结果应与以下结果相同:

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

将“使用UTF8Encoding的属性方式”编辑为“正确的”。。。不会让我编辑它,因为它只是一个2个字符的变化。加1回答确切的问题@user972255-创建XML时请避免字符串操作-一旦XML包含非ASCII字符,您可能会遇到编码不匹配的问题。使用
XmlDocument
XDocument
XmlWriter
方法将XML保存到
MemoryStream
将为您和数据用户节省处理无效XML文件的一些重大痛苦。