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,如需转载请自行联系原作者


相关文章
|
4天前
|
机器学习/深度学习 搜索推荐 知识图谱
图神经网络加持,突破传统推荐系统局限!北大港大联合提出SelfGNN:有效降低信息过载与数据噪声影响
【7月更文挑战第22天】北大港大联手打造SelfGNN,一种结合图神经网络与自监督学习的推荐系统,专攻信息过载及数据噪声难题。SelfGNN通过短期图捕获实时用户兴趣,利用自增强学习提升模型鲁棒性,实现多时间尺度动态行为建模,大幅优化推荐准确度与时效性。经四大真实数据集测试,SelfGNN在准确性和抗噪能力上超越现有模型。尽管如此,高计算复杂度及对图构建质量的依赖仍是待克服挑战。[详细论文](https://arxiv.org/abs/2405.20878)。
14 5
|
12天前
|
机器学习/深度学习 算法 数据挖掘
基于改进K-means的网络数据聚类算法matlab仿真
**摘要:** K-means聚类算法分析,利用MATLAB2022a进行实现。算法基于最小化误差平方和,优点在于简单快速,适合大数据集,但易受初始值影响。文中探讨了该依赖性并通过实验展示了随机初始值对结果的敏感性。针对传统算法的局限,提出改进版解决孤点影响和K值选择问题。代码中遍历不同K值,计算距离代价,寻找最优聚类数。最终应用改进后的K-means进行聚类分析。
|
10天前
|
SQL 安全 算法
网络安全与信息安全:保护数据的关键策略
【7月更文挑战第17天】在数字化时代的浪潮中,网络安全和信息安全的重要性日益凸显。本文将深入探讨网络安全漏洞的成因、影响以及防范措施,同时分析加密技术在保障信息传输安全中的应用,并强调提高个人与企业的安全意识在防御网络威胁中的核心作用。文章旨在为读者提供全面的网络安全知识框架,帮助构建更为坚固的防护墙,确保数据资产的安全。
|
14天前
|
机器学习/深度学习 PyTorch 算法框架/工具
图神经网络是一类用于处理图结构数据的神经网络。与传统的深度学习模型(如卷积神经网络CNN和循环神经网络RNN)不同,
图神经网络是一类用于处理图结构数据的神经网络。与传统的深度学习模型(如卷积神经网络CNN和循环神经网络RNN)不同,
|
23天前
|
安全 算法 网络安全
网络安全与信息安全:保护数据的关键策略
【7月更文挑战第4天】在数字化时代,网络安全和信息安全已成为组织和个人不可忽视的议题。本文将深入探讨网络安全漏洞的成因、当前加密技术的应用以及提升安全意识的重要性。文章旨在为读者提供一套综合性的知识体系,帮助他们更好地理解和应对网络环境中的安全威胁。
30 3
|
29天前
|
JSON 数据可视化 API
技术心得:如何用Python和API收集与分析网络数据?
技术心得:如何用Python和API收集与分析网络数据?
25 2
|
1月前
|
缓存 网络协议 安全
Android网络面试题之Http基础和Http1.0的特点
**HTTP基础:GET和POST关键差异在于参数传递方式(GET在URL,POST在请求体),安全性(POST更安全),数据大小限制(POST无限制,GET有限制),速度(GET较快)及用途(GET用于获取,POST用于提交)。面试中常强调POST的安全性、数据量、数据类型支持及速度。HTTP 1.0引入了POST和HEAD方法,支持多种数据格式和缓存,但每个请求需新建TCP连接。**
30 5
|
1月前
|
安全 网络协议 算法
Android网络基础面试题之HTTPS的工作流程和原理
HTTPS简述 HTTPS基于TCP 443端口,通过CA证书确保服务器身份,使用DH算法协商对称密钥进行加密通信。流程包括TCP握手、证书验证(公钥解密,哈希对比)和数据加密传输(随机数加密,预主密钥,对称加密)。特点是安全但慢,易受特定攻击,且依赖可信的CA。每次请求可能复用Session ID以减少握手。
28 2
|
1月前
|
缓存 网络协议 Android开发
Android网络面试题之Http1.1和Http2.0
HTTP/1.1 引入持久连接和管道机制提升效率,支持分块传输编码和更多请求方式如PUT、PATCH。Host字段指定服务器域名,RANGE用于断点续传。HTTP/2变为二进制协议,实现多工处理,头信息压缩和服务器推送,减少延迟并优化资源加载。HTTP不断发展,从早期的简单传输到后来的高效交互。
26 0
Android网络面试题之Http1.1和Http2.0
|
12天前
|
JSON 数据挖掘 API
在会议系统工程中,Python可以用于多种任务,如网络请求(用于视频会议的连接和会议数据的传输)、数据分析(用于分析会议参与者的行为或会议效果)等。
在会议系统工程中,Python可以用于多种任务,如网络请求(用于视频会议的连接和会议数据的传输)、数据分析(用于分析会议参与者的行为或会议效果)等。