此方法正在写出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编码。
思考?救命?
答案 0 :(得分:2)
使用没有BOM的Utf8和ascii编码的文件看起来完全相同,如果它只包含拉丁字符和数字。
通用文本编辑程序(如记事本,记事本++)将能够以您喜欢的方式猜测编码(除非您提供一些提示,通常使用“打开编码”文件打开选项)。
兼容的XML解析器使用“xml”PI(<?xml version="1.0" encoding="UTF-8"?>
)的“编码”部分来检测没有BOM的文件的正确编码。在您的情况下,您可能会获得正确的“xml”PI和兼容的XML解析器将正确打开它。
如果您需要通过将true
传递给编码构造函数来检测Utf8的所有程序,请正确指定BOM。
请注意,如果没有BOM文件,即使代码大于128的字符也可能检测到其编码错误。