【发布时间】:2018-05-16 03:36:08
【问题描述】:
此方法正在写出一个 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 编码的。
想法?帮助?
【问题讨论】:
-
您选择使用
new UTF8Encoding(false)省略BOM。也许 XML 文件确实是用 utf8 编码的,但由于缺少 BOM,Notepad++ 猜测错误?如果您尝试在补充 Unicode 平面上发出汉字字符,例如 ?????它是正确编码还是转义? -
事实上,我在 github 上找到了 this,这似乎很相关:Notepad++ 无法知道内容编码,所以它必须猜测。它只看到 ASCII,因此它假定最小的公分母(在 Windows 上基本上是 ASCII + 外语扩展,例如 Windows-1252)。
-
谢谢。我确实想知道 Notepad++ 是否弄错了,所以我在 Windows 记事本中交叉检查了它。它还给出了“ANSI”。
-
您的文件中是否有任何不是 ANSI的字符?
标签: c# xml encoding utf-8 ansi