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

时间:2017-12-02 00:43:04

标签: c# xml encoding utf-8 ansi

此方法正在写出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编码。

思考?救命?

1 个答案:

答案 0 :(得分:2)

使用没有BOM的Utf8和ascii编码的文件看起来完全相同,如果它只包含拉丁字符和数字。

通用文本编辑程序(如记事本,记事本++)将能够以您喜欢的方式猜测编码(除非您提供一些提示,通常使用“打开编码”文件打开选项)。

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

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

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