新的UTF8编码(false)仍然会写入UTF8 BOM

3

我在代码中关闭了BOM,但它仍然在我的xml文档中打印出来。我不明白为什么。我查阅了许多资料,但仍然没有找到答案。

我的代码一般是这样的:

XDocument xmlDoc = XDocument.Load(CompDir + File.Name);

AppendToFile(xmlDoc, aDataRow);

using (var writer = new XmlTextWriter
    (FilePrep.CompletedDirectory + File.Name, new UTF8Encoding(false))) 
    { 
    xmlDoc.Save(writer);
    writer.Close();
    }
break;

并且将内容追加到文件的操作看起来像这样:
private void AppendToFile(XDocument xmlDoc, DataRow aDataRow)
{
    //String StrName = aDataRow.ItemArray.GetValue(5).ToString() + ' ' + aDataRow.ItemArray.GetValue(6).ToString();

    try
    {
        XElement foundEl = xmlDoc.Descendants("CreditScoreInfo").First();
        foundEl.Add(new XElement("CreditScore", aDataRow.ItemArray.GetValue(2)),
                    new XElement("CreditScoreDt", aDataRow.ItemArray.GetValue(1)));
                    //,new XElement("ScoredName", StrName)); 
    }
    catch
    {
       XElement persPolicy = xmlDoc.Descendants("PersPolicy").First();
                persPolicy.Add(new XElement("CreditScoreInfo",
                    new XElement("CreditScore", aDataRow.ItemArray.GetValue(2)),
                    new XElement("CreditScoreDt", aDataRow.ItemArray.GetValue(1))));
                    //,new XElement("ScoredName", StrName)));
    }
}

你的保存XML代码看起来没问题。请确保它是唯一写入XML的代码,并且无论你用什么验证方式,都要确保首字节正确显示文件(例如,我认为VS可能无法在二进制模式下正确重新加载文件)。 - Alexei Levenkov
1个回答

2

您可以尝试以下方法作为替代方案:

XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new UTF8Encoding(false);

using (XmlWriter writer = XmlWriter.Create(FilePrep.CompletedDirectory + File.Name, settings))
{
    xmlDoc.Save(writer);
    writer.Close();
}

XmlWriterSettings xws = new XmlWriterSettings(); xws.OmitXmlDeclaration = true; xws.Indent = true; xws.Encoding = new UTF8Encoding(false); - tim.newport
非常感谢。代码让我入门,链接指引我获取其余部分。 - tim.newport

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接