日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

XML的BOM

發(fā)布時間:2023/12/9 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XML的BOM 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近做一個XML的生成與導入功能,生成的XML經(jīng)過語法驗證和Schema驗證,均無錯誤,編碼方式也是所要求UTF-8,可是導入時卻一直提示:

Error on line 1 of document? : Content is not allowed in prolog. Nested exception: Content is not allowed in prolog.
由于導入的系統(tǒng)時稅務部門的網(wǎng)站,無從查看代碼,跟蹤異常,所有的信息只這一句莫名其妙的錯誤提示。

搜索后得知,可能是因為BOM引起的。

什么是BOM呢?

BOM:Byte Order Mark,中文名字節(jié)順序標記。UCS規(guī)范建議在傳輸字節(jié)流前,先傳輸BOM來判斷字節(jié)順序。其實UTF-8是不需要用BOM來表明字節(jié)順序的,但是可以用BOM來表明編碼方式。BOM的UTF-8編碼是EF BB BF,所以呢,如果接受者收到EF BB BF開頭的字節(jié)流,就說明它是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的代碼是:

XmlWriterSettings?settings?=?new?XmlWriterSettings();
settings.Encoding?=?System.Text.Encoding.GetEncoding("utf-8");
XmlWriter?writer?
=?XmlWriter.Create(pathName,?settings);

修改之后:

XmlWriterSettings?settings?=?new?XmlWriterSettings();
settings.Encoding?=?new?UTF8Encoding(false);
XmlWriter?writer?
=?XmlWriter.Create(pathName,?settings);

這樣用XmlWriter生成的XML就是不帶BOM的了,導入成功,不再報錯。

?

轉(zhuǎn)載于:https://www.cnblogs.com/niuniu1985/archive/2011/07/14/2106439.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的XML的BOM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。