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


相关文章
|
10天前
|
Android开发
Android Stadio Build 窗口字符串乱码问题
在使用Android Studio过程中,如果遇到Build窗口字符串乱码问题,可以通过编辑`studio.vmoptions`文件添加`-Dfile.encoding=UTF-8`配置并重启Android Studio来解决。
62 1
Android Stadio Build 窗口字符串乱码问题
|
12天前
|
JavaScript 算法 前端开发
采招网JS逆向:基于AES解密网络数据
采招网JS逆向:基于AES解密网络数据
29 0
|
2天前
|
存储 安全 网络安全
云计算与网络安全:如何保护您的数据在云端
【9月更文挑战第4天】在数字化时代,云计算已成为企业和个人存储和处理数据的首选方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨云计算的基本原理,网络安全的重要性,以及如何在使用云服务时保护数据安全。我们将从云服务的基本概念出发,深入讨论网络安全的关键技术,最后提供一些实用的建议,帮助您在使用云服务时确保数据安全。
20 6
|
11天前
|
数据采集 存储 机器学习/深度学习
豆瓣评分7.6!Python大牛教你如何采集网络数据
网络数据采集大有所为。在大数据深入人心的时代,网络数据采集作为网络、数据库与机器学习等领域的交汇点,已经成为满足个性化网络数据需求的最佳实践。你在浏览器上看到的内容,大部分都可以通过编写Python 程序来获取。如果你可以通过程序获取数据,那么就可以把数据存储到数据库里。如果你可以把数据存储到数据库里,自然也就可以将这些数据可视化。 今天给小伙伴们分享的这份手册采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。
|
10天前
|
存储 安全 网络安全
云计算与网络安全:保护云端数据的关键技术
【8月更文挑战第28天】在数字化时代,云计算服务成为企业和个人存储、处理数据的首选。然而,随之而来的网络安全挑战也日益严峻。本文将深入探讨如何通过先进的网络安全技术来保护云服务中的数据安全。我们将从基础的云服务模型开始,逐步深入到网络安全的核心策略和最佳实践,旨在为读者提供一套完整的解决方案,确保他们的数据在云端得到充分的保护。
|
10天前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
11天前
|
存储 安全 网络安全
云计算与网络安全的博弈:保护数据在虚拟世界中的安全移动应用开发之旅:从新手到专家
【8月更文挑战第27天】随着云计算技术的飞速发展,企业和个人用户越来越多地将数据和服务迁移到云端。然而,这一转变同时带来了新的安全挑战。本文旨在探讨云计算环境下的网络安全问题,并分析如何通过技术和策略保障信息安全。我们将从云服务的基础知识出发,逐步深入到网络安全和信息安全的高级概念,最后讨论如何实施有效的安全措施来抵御网络威胁。文章不仅涵盖了理论框架,还提供了实际案例分析,旨在为读者提供一套全面的云计算安全指南。
|
16天前
|
监控 网络协议 Linux
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?
|
16天前
|
SQL 安全 网络安全
网络安全与信息安全:保护数据的关键策略
【8月更文挑战第22天】在数字化时代,网络安全和信息安全是维护个人隐私、企业机密和国家安全的基石。本文将探讨网络安全漏洞的常见形式、加密技术的重要性以及提升安全意识的途径,旨在为读者提供一套全面的策略,以识别和防范潜在的网络威胁。我们将从基础概念出发,逐步深入到实际应用,帮助读者构建一个更安全的网络环境。
|
4天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:保护数据的关键策略
在数字化时代,网络安全和信息安全成为维护个人隐私和企业资产的前沿防线。本文深入探讨了网络安全漏洞的根源、加密技术的应用以及提升安全意识的重要性。通过分析最新的网络攻击案例和防御措施,我们旨在为读者提供一套实用的知识体系,以识别和防范潜在的网络威胁。
下一篇
DDNS