sax錯誤:org.xml.sax.SAXParseException: Content is not allowed in prolog解決
原因及其解決辦法:1.xml編碼錯誤
該xml是UTF-8編碼的,如果該文件通過UltraEdit編輯後,會在無BOM頭的UTF-8文件中加入BOM,但是DOM4j不認這個BOM(dom4j1.3),解決的辦法可以通過升級dom4j到1.6解決www.dom4j.org
什麼是BOM?https://www.unicode.org/faq/utf_bom.html#22Unicode規範中有一個BOM的概念。BOM——Byte Order Mark,就是字節序標記。在這裏找到一段關於BOM的說明:
在UCS 編碼中有一個叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的編碼是FEFF。而FFFE在UCS中是不存在的字符,所以不應該出現在實際傳輸中。UCS規範建議我們在傳輸字節流前,先傳輸 字符"ZERO WIDTH NO-BREAK SPACE"。這樣如果接收者收到FEFF,就表明這個字節流是Big-Endian的;如果收到FFFE,就表明這個字節流是Little- Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被稱作BOM。
UTF-8不需要BOM來表明字節順序,但可以用BOM來表明編碼方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8編碼是EF BB BF。所以如果接收者收到以EF BB BF開頭的字節流,就知道這是UTF-8編碼了。
Windows就是使用BOM來標記文本文件的編碼方式的。
2.xml文件存在非法字符
把xml 動手敲一遍,刪除不該有的間隔符:比如空格,製表符(TAB)等。
異常提示是Content is not allowed in prolog.意思就是說文件開頭的時候有問題。
怎麼去掉BOM:
首先windows自帶的記事本會在保存UTF-8編碼的文件時不管是否含有BOM一律加上BOM,所以千萬別用記 事本。比較新版本的UltraEdit(以下簡稱UE,大家都是這麼叫的)都對BOM支持比較好,所以推薦使用新版本的UE來解決這個問題。我用的版本是 UltraEdit-32 11.00a+中文版。首先打開UE,選擇菜單欄“高級”-“配置”,出現一個選項卡窗口,在“常規”選項卡中找到“保存時對所有UTF-8文件頭標記 (BOM)”和“對在UltraEdit裏創建的新文件寫入UTF-8文件頭標記(如上麵)”,把它們的複選框都取消不選,然後確定。這個時候UE默認情 況下就不會對沒有BOM的文件加入BOM,注意如果不執行上述操作UE默認也是會加的!那已經含有BOM的文件如何清除BOM呢?下麵演示給大家。首先打 開文件,選擇菜單欄“文件”-“格式轉換”-“UTF-8 轉 ASCII”,這樣文件會被轉為ASCII編碼,BOM就不會存在了,因為上麵說過BOM是在UCS編碼的頭部的,然後再選擇菜單欄“文件”-“格式轉 換”-“ASCII 轉 UTF-8(Unicode編輯)”,這個時候文件會被轉回為UTF-8編碼,因為我們上麵選了不自動加BOM,所以這個時候的文件是不帶BOM的,然後 保存文件。整個操作過程就完畢了。
最後更新:2017-04-03 15:21:46