XML得到错误的UTF编码

时间:2013-09-23 14:26:20

标签: xml utf-8 byte utf stringwriter

我正在尝试使用utf-8编码我的xml文本,代码如下。出于某种原因,我得到utf-16而不是utf-8。有什么理由可以吗?

        StringWriter writer = new StringWriter();
        xdoc.Save(writer);
        writer.Flush();
        string xml = writer.ToString();
        byte[] bytes = Encoding.UTF8.GetBytes(xml);
        System.IO.File.WriteAllBytes(pathDesktop + "\\22CRE002.XPO", bytes);

1 个答案:

答案 0 :(得分:0)

StringWriter本身“通过TextWriter.Encoding属性”广告UTF-16的编码,因此XmlWriter检测到并相应地修改XML声明。您实际上是以UTF-8的形式写出数据 - 只是XML文件本身会声称(错误地)它是UTF-16,导致各种错误。

您的选择是:

  • 使用StringWriter的子类,通过覆盖Encoding属性
  • 来通告不同的编码
  • 完全绕过StringWriter并直接写入文件。

就个人而言,我会选择第二种选择:

using (var writer = XmlWriter.Create(Path.Combine(pathDesktop, "22CRE002.XPO"))
{
    xdoc.Save(writer);
}

为什么首先将它全部缓存在内存中?请注意,如果您未指定编码,XmlWriter将默认为UTF-8。