为什么 XmlWriter 不遵守我设置的编码?

Why is XmlWriter not honoring the encoding I set?

此方法正在写出一个 XML 文件(特定于工作)。除了我将其设置为使用 UTF-8(无 BOM)编码写入文件外,我已经完全写出了我想要的所有内容。

XML 声明说是 UTF-8,但是当我在 Notepad++ 中打开文件时,它显示是用 ANSI 编码的。

        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        settings.Encoding = new UTF8Encoding(false);
        settings.NewLineOnAttributes = true;


        using (var xmlWriter = XmlWriter.Create(@"c:\temp\myUIPB.xml", settings))
        {
            xmlWriter.WriteStartDocument();
            xmlWriter.WriteStartElement("UIScript");

            // Write Event Nodes
            foreach (var eventNode in listBoxOutput.Items)
            {
                lbEvent myNode = (lbEvent)eventNode;
                XmlNode xn = myNode.workflowEvent;
                xn.WriteTo(xmlWriter);
            }

            xmlWriter.WriteFullEndElement();
            xmlWriter.WriteEndDocument();
            xmlWriter.Flush();
            xmlWriter.Close();
        }

我希望如果我将它设置为以 UTF-8 格式输出,那么写出的文件确实是用 UTF-8 编码而不是 ANSI 编码的。

想法?帮助?

使用不带 BOM 和 ascii 编码的 Utf8 文件如果只包含拉丁字符和数字,看起来是一样的。

通用文本编辑程序(如记事本、notepad++)将能够按照您喜欢的方式猜测编码(除非您提供一些提示,通常使用 "Open with encoding" 文件打开选项)。

兼容 XML 解析器使用 "xml" PI (<?xml version="1.0" encoding="UTF-8"?>) 的 "encoding" 部分来检测没有 BOM 的文件的正确编码。在您的情况下,您可能会获得正确的 "xml" PI 并且兼容的 XML 解析器将正确打开它。

如果您需要所有程序都能正确检测 Utf8,请通过将 true 传递给编码构造函数来指定 BOM。

请注意,如果没有 BOM 文件,即使字符的代码超过 128,也可能会错误地检测到其编码。