默认情况下,.NET中生成的Unicode的XML文件都带有BOM头。然而,群中有人问到:在一些特殊情况下,如果不想生成这个BOM头,应该怎么办呢?
查了下MSDN,果然有办法。
先看默认的XMLWriter的用法:
public static void WriteFile()
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = (" ");
using (XmlWriter writer = XmlWriter.Create("books.xml", settings))
{
// Write XML data.
writer.WriteStartElement("book");
writer.WriteElementString("price", "19.95");
writer.WriteEndElement();
writer.Flush();
}
}
这样写会在XML头部添加BOM。要解决问题,请看以下的代码:
public static void WriteFile() { XmlWriterSettings settings = new XmlWriterSettings(); settings.Encoding = new UTF8Encoding(false); settings.Indent = true; settings.IndentChars = (" "); using (XmlWriter writer = XmlWriter.Create("books.xml", settings)) { // Write XML data. writer.WriteStartElement("book"); writer.WriteElementString("price", "19.95"); writer.WriteEndElement(); writer.Flush(); } }
我们需要给settings对象设置一个新的Encoding实例,这个实例是不会添加BOM的。而默认的实例会添加BOM。
请注意构造函数传入了false参数,这会通知Encoding实例不写入BOM。
以下分别是两段代码的输出效果:
我们可以发现前一个文件在头部多了三个字节,分别是ef bb bf,这就是BOM标志了。
转载于:http://didasoft.javaeye.com/blog/274562