【问题标题】:Difference between Encoding.UTF8.GetBytes and UTF8Encoding.Default.GetBytesEncoding.UTF8.GetBytes 和 UTF8Encoding.Default.GetBytes 的区别
【发布时间】:2013-06-04 08:20:22
【问题描述】:

谁能解释一下有什么不同的赌注。 Encoding.UTF8.GetBytes 和 UTF8Encoding.Default.GetBytes?实际上,我正在尝试将 XML 字符串转换为流对象,而现在发生的事情是每当我使用这一行时:

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

它给了我一个错误“System.Xml.XmlException: Invalid character in the given encoding”

但是当我使用这条线时它工作正常:

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

即使在这两种情况下似乎都是 UTF8 编码,一种工作方式而另一种没有?

【问题讨论】:

    标签: c# utf-8 character-encoding


    【解决方案1】:

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

    【讨论】:

    • 将“使用 UTF8Encoding 的属性方式”编辑为“正确”...不允许我编辑它,因为它只有 2 个字符的变化。
    • +1 回答确切问题。 @user972255 - 创建 XML 时请避免字符串操作 - 一旦您的 XML 包含非 ASCII 字符,您可能会遇到编码不匹配的问题。使用XmlDocumentXDocumentXmlWriter 方法将XML 保存到MemoryStream 将为您和您的数据用户节省一些处理无效XML 文件的痛苦。
    猜你喜欢
    • 1970-01-01
    • 2016-09-12
    • 2018-01-06
    • 2012-04-02
    • 2018-04-07
    • 2018-06-27
    • 1970-01-01
    • 2013-05-21
    • 2017-05-12
    相关资源
    最近更新 更多