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阅读器

更多相关文章

  1. android 提升性能总结
  2. android操作文件
  3. Android(安卓)Volley完全解析(一),初识Volley的基本用法
  4. Java笔记:[反射篇] 利用反射,获取类中的私有内部类对象,并调用该对
  5. Android(安卓)屏幕适配之屏幕分辨率(创建不同dimen)适配
  6. 修改Android(安卓)Media Scanner的扫描路径
  7. Android(安卓)HAL实例解析
  8. Android(安卓)65k 问题
  9. 写给初学者Android(安卓)AIDL必看内容

随机推荐

  1. android 让一个控件按钮居于底部的几种方
  2. android studio 报Error:failed to find
  3. Maven + Eclipse + Android(安卓)环境搭
  4. [android]实现拖动效果
  5. Android(安卓)UI系列-----RelativeLayout
  6. Android(安卓)screenOrientation 屏幕方
  7. Android(安卓)3.0 r1 API中文文档(107)
  8. Android实用小技巧
  9. Android(安卓)View MarqueeView 跑马灯效
  10. Android(安卓)adb shell 命令大全