因由:做一个程序,过程中需要解析自定义的xml文件(utf-8)编码
问题:解析过程中出现Content is not allowed in prolog 异常
详细:
又是啃爹的字符集问题
又是可恶的xml操作
又是同软件版本有关
这个问题的原因大意,可以看下面文章:
http://weishuwei.iteye.com/blog/42872
如果解析xml的程序是dom4j,可以通过升级最新版本解决。
如果不是dom4j,可以尝试修改文件的编码,并去除BOM解决。
我的问题是,我不是用dom4j,尝试修改文件编码也不行。
这里只列出xstream的解决方案,其它的也可以顺推解决:
//构建对象,这里无啥问题,
//用什么构造函数、构造参数都可以
XStream xstream = new XStream(new DomDriver());
//下面是重点!!!
InputStream is = new FileInputStream(new File(configFilePath));
try {
Object object = xstream.fromXML(is);
System.out.println(object);
} finally {
is.close();
}
xstream.fromXML有多个重载方法,而这些方法,除inputSteam的参数版本外,其它的都不能成功通过。
原因分析:
经过查看源代码(当然,只看关键的),发现其他重载方法会使用reader对象。懂了吧,reader是读取一行的,自然地会跟BOM扯上关系!!!而我最后用的是流,HOHO~万能的流啊,解决了。
有人说,new XStream时,使用 Dom4jDriver不能解决吗?不是最新版dom4j就ok了吗?
明显地不是,这个跟dom4j无啥关系,关键是xstream用那种方式使用dom4j,如果是用reader,那问题依然是无解决的。
懂了吧~其它类似问题,都可以通过使用流的方式解决(推理而已)。