Android 从网络中获取数据时 产生部分数据乱码的解决
2014-04-12 23:24
471 查看
转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/23562939
问题描述:从网络中抓取html页面进行解析,解析后发现产生部分中文乱码。
由来:***csdn客户端时产生 , http://blog.csdn.net/lmj623565791/article/details/23532797 (java环境下,使用控制台打印出是没有乱码)
![](http://img.blog.csdn.net/20140412231227078?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG1qNjIzNTY1Nzkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
于是立马检查从服务器读取的代码:
发现可能是由于我采用字节流从网络读取数据,且每次读取1024个字节,读取完成后能后强制转化为字符串,又因为使用编码为UTF-8,UTF-8是一种变长码(英文1个字节,中文两个字节),所以1024可能会造成刚好截取了某个汉字的一半(前一个字节),然后转化为字符串时造成乱码。唯一不理解的在java环境下,使用控制台打印出是没有乱码的。如果你有不同的理解欢迎留言探讨。
于是把读取数据的代码从字节流改成字符流,修改后的代码为:
问题描述:从网络中抓取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(); }问题解决。
相关文章推荐
- Android 从网络中获取数据时 产生部分数据乱码的解决
- Android 从网络中获取数据时 产生部分数据乱码的解决
- Android 从网络中获取数据时 产生部分数据乱码的解决
- Android 从网络中获取数据时 产生部分数据乱码的解决
- Android 从网络中获取数据时 产生部分数据乱码的解决
- android中从网络获取数据时产生部分数据乱码的解决方案
- android 获取网络数据,回传到本地用TextView显示乱码问题解决方法
- 解决httpurlconnection获取网页数据部分中文乱码问题
- Android网络编程之使用get方式向服务端提交数据和乱码问题的解决
- Android:解决客户端从服务器上获取数据乱码的方法
- Servlet获取android POST数据乱码的解决办法
- Android - 获取网络数据,Bitmap,ANR,主线程模型,消息机制,UserAgent,乱码问题,xml生成与解析,JSON解析,MVC,SmartImageView
- 在android下出现乱码的问题(在网络中传输和获取数据时)
- Android:解决client从server上获取数据乱码的方法
- Android:解决客户端从服务器上获取数据乱码的方法
- volley 访问网络时候获取json数据发生乱码问题解决方法,以及gson解析json数据。
- Java 简单解决springmvc获取properties文件里面中文内容出现论码问题(我遇到的问题是数据提交检验时返回的错误提示出现乱码)
- android_学习—获取网络数据(图片,html)
- Android 解决部分手机拍照后获取的图片被旋转的问题
- 解决android中客户端和服务器端的数据传输中文乱码问题