关于 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的环境中则会显示。

上一篇:association 的使用


下一篇:【转】python version 2.7 required,which was not found in the registry