【问题标题】:Wrong XML encoding tag written by WriteStartDocumentWriteStartDocument 写入的 XML 编码标记错误
【发布时间】:2011-12-22 08:02:42
【问题描述】:

我已将 XMLWriter 设置为使用 UTF8 编码,但 WriteStartDocument 方法仍会写入 UTF16 标记。

这是代码的一部分:

            m_sbXML = New System.Text.StringBuilder

            m_xmlWriterSettings = New System.Xml.XmlWriterSettings
            With m_xmlWriterSettings
                .Indent = True
                .IndentChars = "    "
                .Encoding = System.Text.Encoding.UTF8
            End With

            m_xmlWriter = System.Xml.XmlWriter.Create(m_sbXML, m_xmlWriterSettings)

            Call m_xmlWriter.WriteStartDocument()

应该写文档标签:

<?xml version="1.0" encoding="utf-8"?>

但它写的是:

<?xml version="1.0" encoding="utf-16"?>

【问题讨论】:

    标签: c# xml vb.net


    【解决方案1】:

    您正在写信给StringBuilder。 .NET 中的字符串始终采用 UTF-16 编码。

    如果您想创建一个 UTF-8 编码的 XML 文件,请写入Stream

    例子:

    var settings = new XmlWriterSettings
    {
        Indent = True,
        IndentChars = "    ",
        Encoding = Encoding.UTF8
    };
    
    using (var stream = new MemoryStream())
    using (var writer = XmlWriter.Create(stream, settings))
    {
        writer.WriteStartDocument();
        // ...
    }
    

    【讨论】:

    • 感谢您使用内存流的建议,但我更喜欢使用 StringBuilder。如果需要,如果可以解决问题,我将使用 UTF16,但尽管文档标签似乎很好,但在 f.e. 中打开 XML。 IE 导致错误提示:“不支持从当前编码切换到指定的编码......”
    • 该错误可能是因为您将结果字符串保存为 UTF-8。您的选择 - 使用 StringBuilder 而不是将字符串保存为 UTF-16,或者使用 Stream 并指定任何编码。
    • 我已经使用UTF16进行了测试,但这并不能解决上述IE错误。
    • 现在我已经通过使用本页中描述的一种解决方法解决了这个问题:undermyhat.org/blog/2009/08/…
    猜你喜欢
    • 2017-03-07
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多