Android 支持三種解析xml文件的方式,dom,sax,pull,我用的比較多的是sax解析,但發現sax默認只解析utf-8編碼的xml文件;
經過網上搜索,最終找到了解決辦法:
1.就是先判斷URL資源上的xml文件的編碼方式
2.而後經過InputStreamReader 設定好編碼,而後將InputStreamReader經過InputSource的構造方法傳給InputSource
3.sax解析InputSource資源時,就會按照指定的編碼方式解析
1.判斷url資源上的xml文件編碼方式,須要經過第三方的jar文件
//獲得探測器代理對象
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
//向代理對象添加探測器
detector.add(JChardetFacade.getInstance());
//獲得編碼字符集對象
Charset charset = detector.detectCodepage(url);
//獲得編碼名稱
String encodingName = charset.name();
2.經過InputStreamReader對象設定解析時的編碼
InputSource inputSource=null;
InputStream stream = null;
//若是是GBK編碼
if("GBK".equals(EncodingUtil.checkEncoding(url))){
stream = url.openStream();
//經過InputStreamReader設定編碼方式
InputStreamReader streamReader = new InputStreamReader(stream,"GBK");
inputSource = new InputSource(streamReader);
}else{
//是utf-8編碼
inputSource = new InputSource(url.openStream());
inputSource.setEncoding("UTF-8");
}
3.使用sax解析InputSource對象
ChinaNews chinaNews = SAXRssService.readRssXml(inputSource);
newsItems=chinaNews.getNewsItems();
經過以上三步就能夠解析gbk或者gb2312編碼的xml文件,將網絡上的rss資源文件解析後,用ListView顯示出來,就成了一個簡單的rss閱讀器
網絡