C# ile geliştirdiğim projelerde XML üretmem gerektiğinde, bu konuda çok becerikli olduğunu düşündüğüm XmlWriter nesnesini kullanırım. Nesneyi oluştururken aşağıdaki gibi oluştururdum;
XmlWriter writer = new XmlTextWriter(stream, Encoding.UTF8);
Bilmediğim şey ise, bu şekilde nesneyi oluştururken otomatik olarak streamin başına UTF-8 tanımlayıcısı olan üç baytlık BOM karakter dizisinin ekleniyor olduğuydu. Yazmış olduğum bir servisi kullanan firmadan gelen dönüş ile, gönderdiğim XML’de BOM olduğunu ve bu yüzden XML’i düzgün işleyemediklerini öğrendim. Bunun üzerine BOM olmadan XML’i nasıl oluştururum diye araştırdım ve buradaki makaleye ulaştım.
Yapmamız gereken çok basit. Daha önce Encoding.UTF8 ile elde ettiğimiz Encoding nesnesini bu sefer yeni bir Encoding nesnesi oluşturarak hallediyoruz. Yeni Encoding nesnemizi oluştururken de encoderShouldEmitUTF8Identifier parametresini false olarak kullanıyoruz;
XmlWriter writer = new XmlTextWriter(stream, new UTF8Encoding(false));
Ben XmlWriter kullanırken bu sorunla karşılaştığımdan yazı da bu konu etrafında şekillendi. Elbette ki Encoding kullandığınız başka durumlarda da bu şekilde Encoding nesneleri oluşturabilirsiniz.