XML的BOM

什么是BOM呢?
BOM:Byte Order Mark,中文名字节顺序标记。UCS规范建议在传输字节流前,先传输BOM来判断字节顺序。其实UTF-8是不需要用BOM来表明字节顺序的,但是可以用BOM来表明编码方式。BOM的UTF-8编码是EF BB BF,所以呢,如果接受者收到EF BB BF开头的字节流,就说明它是UTF-8编码了。由此可见,对于UTF-8来说,BOM是可有可无的,可是,有的XML解析方式不认这个BOM,所以就报错了。

怎么判断XML是否含有BOM呢?
用UltraEdit或者其他可以带有十六进制编辑功能的软件打开XML,如果开头有EF BB BF就说明含有BOM了。

怎样去掉BOM呢?
可以用UltraEdit或者EmEditor打开XML,然后另存为,保存的时候有选项是以无BOM的UTF-8保存还是以有BOM的UTF-8保存。

怎样生成无BOM的XML呢?
要去掉生成的XML的BOM,要从源头上解决,不可能让用户每次生成XML后,手动编辑去掉BOM后再导入。
之前生成XML的代码是:
XmlDocument newXmlDoc = CXMLHelper.CreateXmlDocument("root", "1.0", "UTF-8", string.Empty);
if (null == newXmlDoc)
{
return false;
}
newXmlDoc.Save(path);

修改之后:
XmlDocument newXmlDoc = CXMLHelper.CreateXmlDocument("root", "1.0", "UTF-8", string.Empty);
if (null == newXmlDoc)
{
return false;
}
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new UTF8Encoding(false);
using ( XmlWriter writer = XmlWriter.Create(path, settings) )
{
newXmlDoc.Save(writer);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值