2009年6月11日星期四

java jDom异常: Content is not allowed in prolog

先交代下前提:xml文件为UTF-8

以前在php开发是碰到过类似的事情,不过当时通过记事本打开后删除文件头部的空格就行了。但是今天在javaEE开发中用jDom时,却不能解决,为了解决这个问题,所以现在才能睡,为了不忘记现在这里记录下然后睡觉。

现象:
SAXBuilder builder = new SAXBuilder();
Document doc = null;
Reader in = new StringReader(xmlPath);
在 doc = builder.build(in);时,抛出错误:
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.

原因:
XML文件使用utf-8编码,在文件开始处含有不可解释的字符,该字符串称为BOM。使用软件UltraEdit打开xml文件,转到十六进制编辑,可以发现开始处为FFEF,就是这个字符引起了异常。

解决方法:

可以使用UltraEdit把utf-8转为ascii(在写xml文件时,使用UltraEdit软件编辑,记事本或其他xml软件默认是使用utf-8保存,在UltraEdit软件配置中可以设置默认保存为ascii)。
以上是网上普遍解决方法,然而我尝试后依然没法解决,最后使用FileInputStream in = new FileInputStream(xmlPath);代替Reader类,程序正常运行。

可以参考:
http://happyhou.blog.sohu.com/84258111.html

引用:http://blog.chinaunix.net/u2/65478/showart_1929128.html