org.xml.sax.SAXParseException: Content is not allowed in prolog

来源:互联网 发布:pop3端口号是多少 编辑:程序博客网 时间:2024/05/13 20:57

最近在使用 dom4j 读取一个xml 文件,xml 文件为 utf-8 读取格式 也为utf-8;不知道为什么,死活读取不了,就是要报:

org.xml.sax.SAXParseException: Content is not allowed in prolog 这个错误,搞到我很郁闷!

后来上网搜索一看,原来这里的水也不浅。

 

BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记,在UTF-16里本来是FF FE,变成UTF-8就成了EF BB BF。这个标记是可选的,因为UTF8字节没有顺序,所以它可以被用来检测一个字节流是否是UTF-8编码的。微软做这种检测,但有些软件不做这种检测,而把它当作正常字符处理。

微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的, 然而这个只是微软暗自作的标记, 其它平台上并没有对UTF-8文本文件做个这样的标记。

也就是说一个UTF-8文件可能有BOM,也可能没有BOM,那么怎么区分呢?三种方法。1,用UltraEdit-32打开文件,切换到十六进制编辑模式,察看文件头部是否有EF BB BF。2,用Dreamweaver打开,察看页面属性,看“包括Unicode签名BOM”前面是否有个勾。3,用Windows的记事本打开,选择 “另存为”,看文件的默认编码是UTF-8还是ANSI,如果是ANSI则不带BOM。

 

到这里,真相大白,可恶的微软,把utf-8 格式的文件在前边加了 EF BB BF三个字节 ,而dom4j 不认这些!我们使用ue 打开xml 文件,另存为"utf-8 无bom" 大功告成。

原创粉丝点击