文档章节

Android 从网络中获取数据时 产生部分数据乱码的解决

 冷小菜
发布于 2014/12/13 14:06
字数 497
阅读 6
收藏 0

转载请表明出处: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();
	}
问题解决。





本文转载自:http://blog.csdn.net/lmj623565791/article/details/23562939

粉丝 2
博文 63
码字总数 0
作品 0
海淀
私信 提问
Android http中文乱码问题

总结下android下的中文乱码问题,以后开发东西基本就在这里写了。一是通过javaeye能认识不少朋友。二是对自己的博客内容进行管理。三是平时日志在sina的博客里写吧。 一 url to android JAV...

xiahuawuyu
2012/10/11
1K
0
Android Volley 框架JSON中文乱码问题的解决

近期在项目中使用Volley作为网络通信框架,却发现在传输中文时会出现乱码。先交代一下项目的软硬件的基础设施线上:Django+restful_framework+monogdbAPP:Android + volley 在使用android端测...

troy_psl
2015/03/31
7.1K
8
Android WebView出现的乱码问题

1、webview加载网页<html>源码乱码问题 一、webView.loadUrl(); 直接显示网页内容(单独显示网络图片),一般不会出现乱码。 二、webView.loadData(data, "text/html", "UTF-8"); loadData主要......

当空皓月
2015/01/05
4.4K
5
踢开Android 开发中的绊脚石

在开发过程中,许多并算不上高级技能甚至连基础知识都不算的东西经常被忽略,但这些东西还经常是开发过程中的绊脚石,很长时间都解决不了,一旦找到了解决办法,就茅塞顿开了“原来是这样啊,...

Xiao_Mai
2017/10/24
0
0
Android中一个webkit处理汉字编码的问题

在XX项目中解决android webkit处理汉字编码问题的总结 问题: 服务器通过302重定向方式发送给客户端重定向地址,地址中的汉字采用原数据方式发送,没有经过任何编码。因为其中存在汉字,所以...

ghost045
2015/04/02
177
0

没有更多内容

加载失败,请刷新页面

加载更多

Android面试常客之Handler全解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/fnhfire_7030/article/details/79518819 前言:又到了一年...

shzwork
29分钟前
4
0
position sticky 定位

本文转载于:专业的前端网站➫position sticky 定位 1、兼容性 https://caniuse.com/#search=sticky chrome、ios和firefox兼容性良好。 2、使用场景 sticky:粘性。粘性布局。 在屏幕范围内时...

前端老手
36分钟前
4
0
CentOS 7 yum 安装 PHP7.3 教程

参考:https://www.mf8.biz/centos-rhel-install-php7-3/ 1、首先安装 EPEL 源: yum install epel-release 安装 REMI 源: yum install http://rpms.remirepo.net/enterprise/remi-release......

dragon_tech
51分钟前
4
0
Linux物理网卡聚合及桥接

Linux内部实现的bridge可以把一台机器上的多张网卡桥接起来,从而把自己作为一台交换机。同时,LInux bridge还支持虚拟端口,即桥接的不一定都是物理网卡接口,还可以是虚拟接口。目前主要表...

xiangyunyan
51分钟前
4
0
一起来学Java8(一)——函数式编程

在这篇文章中,我们将了解到在Java8下如何进行函数式编程。 函数式编程 所谓的函数式编程就是把函数名字当做值进行传递,然后接收方拿到这个函数名进行调用。 首先来看下JavaScript如何进行函...

猿敲月下码
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部