1. 程式人生 > >掌間無限—Android 解析gbk、gb2312編碼的xml檔案

掌間無限—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檔案。