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));