use*_*255 9 c# utf-8 character-encoding
有人可以解释我有什么不同的赌注.Encoding.UTF8.GetBytes和UTF8Encoding.Default.GetBytes?实际上我正在尝试将XML字符串转换为流对象,现在发生的是每当我使用这一行时:
MemoryStream stream = new MemoryStream(UTF8Encoding.Default.GetBytes(xml));
Run Code Online (Sandbox Code Playgroud)
它给我一个错误"System.Xml.XmlException:给定编码中的无效字符"
但是,当我使用这一行时它工作正常:
**MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml));**
Run Code Online (Sandbox Code Playgroud)
尽管在两种情况下它似乎都是UTF8编码,但是其中一种方式不起作用?
Ree*_*sey 15
没有UTF8Encoding.Default财产.当你写这个时,实际上你正在返回基类静态属性,Encoding.Default它不是UTF8(它是系统的默认ANSI代码页编码).
因此,两者将返回非常不同的结果 - UTF8Encoding.Default实际上Encoding.Default,您将返回与使用ASCIIEncoding.Default或任何其他System.Text.Encoding子类相同的内容.
正确的使用方法是使用UTF8Encoding您创建的实例,例如:
MemoryStream stream = new MemoryStream((new UTF8Encoding()).GetBytes(xml));
Run Code Online (Sandbox Code Playgroud)
以上应提供与以下相同的结果:
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml));
Run Code Online (Sandbox Code Playgroud)