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