How can I remove the BOM from XmlTextWriter using C#?

byte-order-mark, c#, xml, xmlwriter

Solution

You're saving the file twice - once with `XmlTextWriter` and once with `xmlDoc.Save`. Saving from the `XmlTextWriter` isn't adding a BOM - saving with `xmlDoc.Save` is.

Just save to a `TextWriter` instead, so that you can specify the encoding again:

using (TextWriter writer = new StreamWriter(filename, false,
                                            new UTF8Encoding(false))
{
    xmlDoc.Save(writer);
}

Problem

How do remove the BOM from an XML file that is being created? I have tried using the new UTF8Encoding(false) method, but it doesn't work. Here is the code I have: ``` XmlDocument xmlDoc = new XmlDocument(); XmlTextWriter xmlWriter = new XmlTextWriter(filename, new UTF8Encoding(false)); xmlWriter.Formatting = Formatting.Indented; xmlWriter.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"); xmlWriter.WriteStartElement("items"); xmlWriter.Close(); xmlDoc.Load(filename); XmlNode root = xmlDoc.DocumentElement; XmlElement item = xmlDoc.CreateElement("item"); root.AppendChild(item); XmlElement itemCategory = xmlDoc.CreateElement("category"); XmlText itemCategoryText = xmlDoc.CreateTextNode("test"); item.AppendChild(itemCategory); itemCategory.AppendChild(itemCategoryText); xmlDoc.Save(filename); ```

Original source