掌間無限—Android 解析gbk、gb2312編碼的xml檔案
工作開發中,我們遇到的XML檔案大多數都是UTF—8格式的檔案,可一旦遇到不是UTF—8的XML檔案,我們該怎麼去解析?android預設的有三種解決方式:,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檔案。