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();