事情经过
Android项目中需要将一些配置属性移至服务器上,然后统一用xstream解析xml文件并反序列化成配置类,再交由业务逻辑进行调用,但是在实践的过程中发现,经由记事本更改的配置文件无法被xstream解析,最开始想到编码错误的问题,并且使用记事本的另存为将配置文件保存为[UTF-8]格式,重新试验后,问题依然存在。
com.thoughtworks.xstream.io.StreamException: :
Unexpected token (position:TEXT @*:* in java.io.StringReader@**)
使用Android Studio IDE编辑的配置文件,能够正常被xstream解析.
一个很偶然的操作,EditPlus编辑的原始配置文件,能够被xstream解析,使用EditPlus打开无法被xstream解析的文件(记事本编辑过),发现编码格式是[UTF-8+BOM],莫名感动,原来是BOM格式搞的鬼
比较好的解决方法
就目前来看,因为带BOM格式的文件在xstream解析的过程中,内容首部会自动加上"\ufeff".因此屏蔽乱码的一个方法就是过滤掉这些字符串
String filterStr = String.replcaeAll("^\ufeff","").
推荐扩展阅读:
知乎上关于BOM的讨论
编码歪传——番外篇