關於 SAXParseException Content is not allowed in Prolog (前言中不允許有內容)

解析 XML 文件的時候,如 Mybatis 的 Mapper 文件,有時會出現 org.xml.sax.SAXParseException 前言中不允許有內容 的異常,英文就是 Content is not allowed in Prolog 。導致這個問題通常是兩個原因

  1. XML 文件開頭出現了空白符或其它字符,比如 <?xml version="1.0" 這種開頭有空格或者是 .<?xml version="1.0" 這種出現多餘符號的。
  2. 文件編碼爲 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的環境中則會顯示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章