【发布时间】:2014-01-07 20:49:57
【问题描述】:
我看到 XmlTextWriter 出现一些我不希望出现的行为。当我通过任一方式实例化编写器时指定编码时
new XmlTextWriter(fs, Encoding.UTF8)
或
XmlWriter.Create(fs, new XmlWriterSettings(){Encoding = Encoding.UTF8} )
生成的文档在文档开头有一个前导十六进制字符。由于我将 XML 传递给的 C++ 解析器无法读取此字符,因此我想避免使用此字符。有趣的是,当我创建这样的作家时
new XmlTextWriter(fs, null)
我得到了我期望的确切行为。如何在不将参数留空的情况下在代码中重新创建此实例化?
【问题讨论】:
-
仅供参考,您不应使用
new XmlTextReader()或new XmlTextWriter()。自 .NET 2.0 以来,它们已被弃用。请改用XmlReader.Create()或XmlWriter.Create()。 -
什么是“前导十六进制字符”?我希望这是 byte order mark,当您指定 UTF-8 时它是有意义的。也许您的 C++ 解析器不知道如何解码 UTF-8?
-
约翰,这就是问题的重点。我想使用 xmlWriter.Create() 但我无法获得与 new XmlTextWriter() 相同的行为
-
groverboy,我希望你是对的(我不确定)。但是(1)我无法控制C++解析器和(2)MSDN说在构造函数中传递null时使用的默认编码是UTF-8,所以我猜编码是正确的,我只是XmlWriter不指定第一个字符。