Android 从网络中获取数据时 产生部分数据乱码的解决
来源:互联网 发布:英国进出口数据 编辑:程序博客网 时间:2024/05/16 10:10
转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/23562939
问题描述:从网络中抓取html页面进行解析,解析后发现产生部分中文乱码。
由来:制作csdn客户端时产生 , http://blog.csdn.net/lmj623565791/article/details/23532797 (java环境下,使用控制台打印出是没有乱码)
于是立马检查从服务器读取的代码:
/** * 返回该链接地址的html数据 * * @param urlStr * @return * @throws CommonException */public static String doGet(String urlStr) throws CommonException{StringBuffer sb = new StringBuffer();try{URL url = new URL(urlStr);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5000);conn.setDoInput(true);conn.setDoOutput(true);if (conn.getResponseCode() == 200){InputStream is = conn.getInputStream();int len = 0;byte[] buf = new byte[1024];while ((len = is.read(buf)) != -1){sb.append(new String(buf, 0, len, "UTF-8"));}is.close();} else{throw new CommonException("访问网络失败!");}} catch (Exception e){throw new CommonException("访问网络失败!");}return sb.toString();}
发现可能是由于我采用字节流从网络读取数据,且每次读取1024个字节,读取完成后能后强制转化为字符串,又因为使用编码为UTF-8,UTF-8是一种变长码(英文1个字节,中文两个字节),所以1024可能会造成刚好截取了某个汉字的一半(前一个字节),然后转化为字符串时造成乱码。唯一不理解的在java环境下,使用控制台打印出是没有乱码的。如果你有不同的理解欢迎留言探讨。
于是把读取数据的代码从字节流改成字符流,修改后的代码为:
/** * 返回该链接地址的html数据 * * @param urlStr * @return * @throws CommonException */public static String doGet(String urlStr) throws CommonException{StringBuffer sb = new StringBuffer();try{URL url = new URL(urlStr);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5000);conn.setDoInput(true);conn.setDoOutput(true);if (conn.getResponseCode() == 200){InputStream is = conn.getInputStream();InputStreamReader isr = new InputStreamReader(is,"UTF-8");int len = 0;char[] buf = new char[1024];while ((len = isr.read(buf)) != -1){sb.append(new String(buf, 0, len));}is.close();isr.close();} else{throw new CommonException("访问网络失败!");}} catch (Exception e){throw new CommonException("访问网络失败!");}return sb.toString();}
问题解决。 8 0
- Android 从网络中获取数据时 产生部分数据乱码的解决
- Android 从网络中获取数据时 产生部分数据乱码的解决
- Android 从网络中获取数据时 产生部分数据乱码的解决
- android中从网络获取数据时产生部分数据乱码的解决方案
- Android中从网络获取数据的方法
- 在android下出现乱码的问题(在网络中传输和获取数据时)
- Android:解决客户端从服务器上获取数据乱码的方法
- Android:解决客户端从服务器上获取数据乱码的方法
- Android中网络获取数据的方法
- 解决httpurlconnection获取网页数据部分中文乱码问题
- Android中获取网络数据
- 从网络获取数据
- 使用NSJSONSerialization解析从网络中获取的数据
- 十六、从网络中获取网页数据
- 十六、从网络中获取网页数据
- python从数据库中获取utf8格式的中文数据输出时变成问号或乱码
- 解决springMVC在浏览器请求数据时产生的乱码问题
- Java中解决Servlet获取请求(GET/POST)数据时数据乱码问题
- 每天进步一点点——一致性哈希算法(consistent hashing)
- 比较合理的extern作用描述
- Qt 下 model view programming
- Reactor模型与epoll模型的区别
- HDU—2571 命运
- Android 从网络中获取数据时 产生部分数据乱码的解决
- java ftp客戶端
- SQL Server自增列(Identity列)的所有操作
- Opticks4.11运行时配置
- Python 出现 can't use a string pattern on a bytes-like object
- vs不能编译openssh
- IIC总线读写小记
- sql 表的创建等操作
- java基础语法