0

我正在尝试使用 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);
4

1 回答 1

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。

于 2013-09-23T14:33:57.343 回答