Byte-Order Mark (BOM) används för att tala om vad det är för UTF encoding på en fil och ligger alltid som dom första teckna i filen. Har man en texfil som är har UTF encoding är det tre tecken längst fram i filen som säger vilken UTF det är. Det här är inga problem så länge man jobbar i windowsmiljö. Öppnar man filen i notepad är dom tre första teckna osynliga men tittar man med en hexeditor eller något annat kan man se dom.

 

Den potentiella risken är om man exporterar filer till andra system som får fel vid inläsning om BOM teckna sitter i början av filen.

 

Här är ett exempel på en xml fil som kommer att sparas ner med BOM i början.

 

            XElement xmlDoc = XElement.Load("xmlDocumentToLoad.xml");

 

            //Make changes to the xml Document

 

            xmlDoc.Save("updatedXmlDocument.xml");

 

För att komma runt det här problemet kan man använda en xmlWriter för att spara istället för Save funktionen. På det här sättet får vi en chans att välja om vi vill skriva ut BOM i början av filen när vi initierar Encoding klassen. Det här fungerar förstås utmärkt om det är så att man behöver använda en annan encoding än UTF också.

 

            XElement xmlDoc = XElement.Load("xmlDocumentToLoad.xml");

 

            //Make changes to the xml Document

 

            XmlWriterSettings writerSettings = new XmlWriterSettings();

            writerSettings.Encoding = new System.Text.UTF8Encoding(false);

            writerSettings.CloseOutput = true;

            writerSettings.Indent = true;

 

            XmlWriter xmlWriter = XmlWriter.Create("updatedXmlDocument.xml", writerSettings);

            xmlDoc.Save(xmlWriter);

            xmlWriter.Flush();

            xmlWriter.Close();