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

简介:

产生部分数据乱码的解决

标签: android部分中文乱码
 分类:
【Android 基础】 (15) 

转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/23562939

问题描述:从网络中抓取html页面进行解析,解析后发现产生部分中文乱码。

由来:制作csdn客户端时产生 , http://blog.csdn.net/lmj623565791/article/details/23532797  (Java环境下,使用控制台打印出是没有乱码)

于是立马检查从服务器读取的代码:

 

[java]  view plain  copy
 
在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:18px;">  /** 
  2.      * 返回该链接地址的html数据 
  3.      *  
  4.      * @param urlStr 
  5.      * @return 
  6.      * @throws CommonException 
  7.      */  
  8.     public static String doGet(String urlStr) throws CommonException  
  9.     {  
  10.         StringBuffer sb = new StringBuffer();  
  11.         try  
  12.         {  
  13.             URL url = new URL(urlStr);  
  14.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  15.             conn.setRequestMethod("GET");  
  16.             conn.setConnectTimeout(5000);  
  17.             conn.setDoInput(true);  
  18.             conn.setDoOutput(true);  
  19.   
  20.             if (conn.getResponseCode() == 200)  
  21.             {  
  22.                 InputStream is = conn.getInputStream();  
  23.                 int len = 0;  
  24.                 byte[] buf = new byte[1024];  
  25.   
  26.                 while ((len = is.read(buf)) != -1)  
  27.                 {  
  28.                     sb.append(new String(buf, 0, len, "UTF-8"));  
  29.                 }  
  30.   
  31.                 is.close();  
  32.             } else  
  33.             {  
  34.                 throw new CommonException("访问网络失败!");  
  35.             }  
  36.   
  37.         } catch (Exception e)  
  38.         {  
  39.             throw new CommonException("访问网络失败!");  
  40.         }  
  41.         return sb.toString();  
  42.     }  
  43. </span>  

发现可能是由于我采用字节流从网络读取数据,且每次读取1024个字节,读取完成后能后强制转化为字符串,又因为使用编码为UTF-8,UTF-8是一种变长码(英文1个字节,中文两个字节),所以1024可能会造成刚好截取了某个汉字的一半(前一个字节),然后转化为字符串时造成乱码。唯一不理解的在java环境下,使用控制台打印出是没有乱码的。如果你有不同的理解欢迎留言探讨。

 

于是把读取数据的代码从字节流改成字符流,修改后的代码为:

 

[java]  view plain  copy
 
在CODE上查看代码片派生到我的代码片
  1. <span style="font-size:18px;">  /** 
  2.      * 返回该链接地址的html数据 
  3.      *  
  4.      * @param urlStr 
  5.      * @return 
  6.      * @throws CommonException 
  7.      */  
  8.     public static String doGet(String urlStr) throws CommonException  
  9.     {  
  10.         StringBuffer sb = new StringBuffer();  
  11.         try  
  12.         {  
  13.             URL url = new URL(urlStr);  
  14.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  15.             conn.setRequestMethod("GET");  
  16.             conn.setConnectTimeout(5000);  
  17.             conn.setDoInput(true);  
  18.             conn.setDoOutput(true);  
  19.   
  20.             if (conn.getResponseCode() == 200)  
  21.             {  
  22.                 InputStream is = conn.getInputStream();  
  23.                 InputStreamReader isr = new InputStreamReader(is,"UTF-8");  
  24.                 int len = 0;  
  25.                 char[] buf = new char[1024];  
  26.   
  27.                 while ((len = isr.read(buf)) != -1)  
  28.                 {  
  29.                     sb.append(new String(buf, 0, len));  
  30.                 }  
  31.   
  32.                 is.close();  
  33.                 isr.close();  
  34.             } else  
  35.             {  
  36.                 throw new CommonException("访问网络失败!");  
  37.             }  
  38.   
  39.         } catch (Exception e)  
  40.         {  
  41.             throw new CommonException("访问网络失败!");  
  42.         }  
  43.         return sb.toString();  
  44.     }  
  45. </span>  
问题解决。

 


 


 



    本文转自 一点点征服   博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/6249021.html,如需转载请自行联系原作者


相关文章
|
2天前
|
缓存 JSON 网络协议
Android面试题:App性能优化之电量优化和网络优化
这篇文章讨论了Android应用的电量和网络优化。电量优化涉及Doze和Standby模式,其中应用可能需要通过用户白名单或电池广播来适应限制。Battery Historian和Android Studio的Energy Profile是电量分析工具。建议减少不必要的操作,延迟非关键任务,合并网络请求。网络优化包括HTTPDNS减少DNS解析延迟,Keep-Alive复用连接,HTTP/2实现多路复用,以及使用protobuf和gzip压缩数据。其他策略如使用WebP图像格式,按网络质量提供不同分辨率的图片,以及启用HTTP缓存也是有效手段。
21 9
|
3天前
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
19 6
|
7天前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
75 9
|
2天前
|
JSON Java API
【Android】使用 Retrofit2 发送异步网络请求的简单案例
**摘要:** Retrofit是Android和Java的HTTP客户端库,简化了RESTful API交互。它通过Java接口定义HTTP请求,并提供注解管理参数、HTTP方法等。要使用Retrofit,首先在AndroidManifest.xml中添加`INTERNET`权限,然后在`build.gradle`中引入Retrofit和Gson依赖。创建服务器响应数据类和描述接口的接口,如`Result`和`Api`。通过Retrofit.Builder配置基础URL并构建实例,之后调用接口方法创建Call对象并发送异步请求。
29 1
|
6天前
|
存储 安全 网络安全
云计算与网络安全:保护数据的关键前沿
在信息化社会中,云计算技术的快速发展为企业和个人提供了前所未有的便利。然而,随着云服务的普及,网络安全和信息安全问题也日益凸显。本文探讨了云计算中的网络安全挑战,并介绍了一些关键技术和策略,以保障云环境中的数据安全。
16 4
|
6天前
|
缓存 网络协议 Java
Android面试题之Java网络通信基础知识
Socket是应用与TCP/IP通信的接口,封装了底层细节。网络通信涉及连接、读写数据。BIO是同步阻塞,NIO支持多路复用(如Selector),AIO在某些平台提供异步非阻塞服务。BIO示例中,服务端用固定线程池处理客户端请求,客户端发起连接并读写数据。NIO的关键是Selector监控多个通道的事件,减少线程消耗。书中推荐《Java网络编程》和《UNIX网络编程》。关注公众号AntDream了解更多。
18 2
|
7天前
|
XML JSON Java
Android面试题 之 网络通信基础面试题
序列化对比:Serializable码流大、性能低;XML人机可读但复杂;JSON轻量、兼容性好但空间消耗大;ProtoBuff高效紧凑。支持大量长连接涉及系统限制调整、缓冲区优化。select/poll/epoll是IO多路复用,epoll在高连接数下性能更优且支持边缘触发。水平触发持续通知数据,边缘触发仅通知新数据。直接内存减少一次拷贝,零拷贝技术如sendfile和MMAP提升效率。关注公众号&quot;AntDream&quot;了解更多技术细节。
12 1
|
14天前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之如何拉取经典网络的数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
11天前
|
存储 XML 数据处理
Python网络实践:去哪儿旅游数据爬取指南
Python网络实践:去哪儿旅游数据爬取指南
|
13天前
|
分布式计算 NoSQL 大数据
MaxCompute产品使用合集之自定义udf连接云上vpc网络的redis获取数据的步骤是什么
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。

热门文章

最新文章