Android 从网络中获取数据时 产生部分数据乱码的解决
版权声明:本文为博主原创文章,未经博主允许不得转载。
转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/23562939
问题描述:从网络中抓取html页面进行解析,解析后发现产生部分中文乱码。
由来:制作csdn客户端时产生 , http://blog.csdn.net/lmj623565791/article/details/23532797 (Java环境下,使用控制台打印出是没有乱码)
于是立马检查从服务器读取的代码:
- <span style="font-size:18px;"> /**
- * 返回该链接地址的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();
- }
- </span>
发现可能是由于我采用字节流从网络读取数据,且每次读取1024个字节,读取完成后能后强制转化为字符串,又因为使用编码为UTF-8,UTF-8是一种变长码(英文1个字节,中文两个字节),所以1024可能会造成刚好截取了某个汉字的一半(前一个字节),然后转化为字符串时造成乱码。唯一不理解的在java环境下,使用控制台打印出是没有乱码的。如果你有不同的理解欢迎留言探讨。
于是把读取数据的代码从字节流改成字符流,修改后的代码为:
- <span style="font-size:18px;"> /**
- * 返回该链接地址的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();
- }
- </span>
问题解决。
Android 从网络中获取数据时 产生部分数据乱码的解决的更多相关文章
- Android从网络中获取xml文件并解析数据
public class XmlwebData { @SuppressLint("UseValueOf") public static List<Person> get ...
- Android中获取网页表单中的数据实现思路及代码
在Android中获取网页里表单中的数据具体实现代码如下,感兴趣的各位可以参考过下哈,希望对大家有所帮助 MainActivity如下: 复制代码 代码如下: package cn.testjavas ...
- Android中获取网页表单中的数据
MainActivity如下: package cn.testjavascript; import java.util.StringTokenizer; import android.os.Bundl ...
- Sql 中获取年月日时分秒的函数
getdate():获取系统当前时间 dateadd(datepart,number,date):计算在一个时间的基础上增加一个时间后的新时间值,比如:dateadd(yy,30,getdate()) ...
- 从网络中获取图片显示到Image控件并保存到磁盘
一.从网络中获取图片信息: /// <summary> /// 获取图片 /// </summary> /// <param name="url"&g ...
- koa 基础(十)原生node.js 在 koa 中获取表单提交的数据
1.app.js // 引入模块 const Koa = require('koa'); const router = require('koa-router')(); /*引入是实例化路由 推荐*/ ...
- 在Express 中获取表单请求体数据
在Express 中获取表单请求体数据 获取 GET 请求参数 获取 POST 请求体数据 安装 配置 获取 GET 请求参数 Express 内置了一个 API , 可以直接通过 req.query ...
- python 使用xlsxwriter 写入数据时,当数据中链接的后面包含空格时(如:"http://*** "),导出问题打开报错
python 在使用 xlsxwriter组件写入数据时,当数据包含类似“http://*** /”数据时,导出的excel,打开时会提示如下错误: 没有查到相关的资料处理这个问题,可能原因为exce ...
- 爬虫爬数据时,post数据乱码解决办法
最近在写一个爬虫,目标网站是:http://zx.bjmemc.com.cn/,可能是为了防止被爬取数据,它给自身数据加了密.用谷歌自带的抓包工具也不能捕获到数据.于是下了Fiddler. F ...
随机推荐
- [译]Godot系列教程一 - 场景与节点
场景(Scene)与节点(Node) 简介 先设想有那么一瞬间你自己不再是一名游戏开发者了,而是一名大厨! 你的装备换成了一套大厨的制服.不要考虑制作游戏的事情,你现在的职责是为你的顾客创建新的可口的 ...
- php实现hack中的Shape特性
用php进行静态类型编程,估计是我的一个心结. 依次有几篇文章都记录了我的一些探索: 通过指定函数/方法形参类型提高PHP代码可靠性 http://www.cnblogs.com/x3d/p/4285 ...
- 转载:《TypeScript 中文入门教程》 13、类型兼容性
版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 TypeScript里的类型兼容性基于结构子类型的. 结构类型是只一种只使用其成 ...
- 判别或预测方法汇总(判别分析、神经网络、支持向量机SVM等)
%% [Input]:s_train(输入样本数据,行数为样本数,列为维数):s_group(训练样本类别):s_sample(待判别数据)%% [Output]:Cla(预测类别) function ...
- 配置文件(App.config文件)
1. 配置文件概述: 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是 co ...
- Python开发【第三篇】:Python基本之文件操作
Python基本之文本操作 一.初识文本的基本操作 在python中打开文件有两种方式,即:open(...) 和 file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open ...
- SharePoint 2013 配置Excel Services
前言:本文主要介绍如何启用SharePoint 2013版本Excel Services服务,并配置Excel Web Access部件,使Excel文档可以显示在Web页面中. 简单说一下流程,Sh ...
- Android的Message Pool是什么——源码角度分析
原文地址: http://blog.csdn.net/xplee0576/article/details/46875555 Android中,我们在线程之间通信传递通常采用Android的消息机制,而 ...
- LinearLayout布局问题
LinearLayout是平时开发中很常见的线性布局方式,分为水平和竖直2种,笔者在实际使用中发现了如下问题,希望能帮到别人. 横着的LinearLayout,凡是设置x坐标的属性都不起作用,比如la ...
- Servlet的生命周期+实现方式
1.Servlet的生命周期: (1)被创建: 默认情况下,Servlet第一次被访问时,被服务器创建.会调用init()方法. 一个 ...