解析 XML 文件的時候,如 Mybatis 的 Mapper 文件,有時會出現 org.xml.sax.SAXParseException 前言中不允許有內容
的異常,英文就是 Content is not allowed in Prolog
。導致這個問題通常是兩個原因
- XML 文件開頭出現了空白符或其它字符,比如
<?xml version="1.0"
這種開頭有空格或者是.<?xml version="1.0"
這種出現多餘符號的。 - 文件編碼爲 UTF-8 with BOM,即帶 BOM 頭的 UTF-8 格式,很多時候都是這個原因。
如果是文件編碼的問題,使用普通的 IDE 轉一下格式就行,轉成無 BOM 的。
關於 BOM
字節順序標記(英語:byte-order mark,BOM)是位於碼點U+FEFF的統一碼字符的名稱
不建議使用帶 BOM 的 UTF-8 格式
UTF-8編碼過的字節順序標記則被用來標示它是UTF-8的文件。它只用來標示一個UTF-8的文件,而不用來說明字節順序。許多視窗程序(包含記事本)會添加字節順序標記到UTF-8文件。然而,在類Unix系統(大量使用文本文件,用於文件格式,用於進程間通信)中,這種作法則不被建議採用。因爲它會妨礙到如解譯器腳本開頭的Shebang等的一些重要的碼的正確處理。它亦會影響到無法識別它的編程語言。如gcc會報告源碼檔開頭有無法識別的字符。而在PHP中,如果沒有激活輸出緩衝(output buffering),它會使得頁面內容開始被送往瀏覽器(即:用戶頭文件已被提交),這使PHP腳本無法指定用戶頭文件(HTTP Header)。字節順序標記在UTF-8中被表示爲序列EF BB BF,對大部分未準備好處理UTF-8的文本編輯器及網頁瀏覽器而言,在ISO-8859-1的環境中則會顯示。