事情經(jīng)過
Android項目中需要將一些配置屬性移至服務(wù)器上,然后統(tǒng)一用xstream解析xml文件并反序列化成配置類,再交由業(yè)務(wù)邏輯進(jìn)行調(diào)用,但是在實(shí)踐的過程中發(fā)現(xiàn),經(jīng)由記事本更改的配置文件無法被xstream解析,最開始想到編碼錯誤的問題,并且使用記事本的另存為將配置文件保存為[UTF-8]格式,重新試驗后,問題依然存在。
com.thoughtworks.xstream.io.StreamException: :
Unexpected token (position:TEXT @*:* in java.io.StringReader@**)
使用Android Studio IDE編輯的配置文件,能夠正常被xstream解析.
一個很偶然的操作,EditPlus編輯的原始配置文件,能夠被xstream解析,使用EditPlus打開無法被xstream解析的文件(記事本編輯過),發(fā)現(xiàn)編碼格式是[UTF-8+BOM],莫名感動,原來是BOM格式搞的鬼
比較好的解決方法
就目前來看,因為帶BOM格式的文件在xstream解析的過程中,內(nèi)容首部會自動加上"\ufeff".因此屏蔽亂碼的一個方法就是過濾掉這些字符串
String filterStr = String.replcaeAll("^\ufeff","").
推薦擴(kuò)展閱讀:
知乎上關(guān)于BOM的討論
編碼歪傳——番外篇