Android关于中文url编码类似于%E5%8F%8C%E5%AD%90%E5%BA%A7_.cnb8%80%e8%be%88%e5%ad%90-程序员宅基地

技术标签: android,编码问题  

转载声明:原文来自:http://blog.csdn.net/zml_2015/article/details/51007932#comments

通过调用第三方APi数据,需要发送请求,之前URl请求中都是数字和字母,所以不会遇到返回的数据为空的问题,但是今天在发送的URL请求中含有中文了,就有问题了,在Java中,不会出现访问中文URL有问题的现象,因为我一开始用的是MyEclipse写的测试,可以通过中文URL地址拿到数据,但是我把同样的代码copy到Android中就有问题了

同一个方法,在MyEclipse中写测试的时候,可以拿到第三方的json数据,但是把同样的方法放在android中就拿到的值却为空(网络通信封装的是HttpURLConnection)

获得到的数据:

在Android中,粘贴过来的代码:
 

却拿不到数据

解决方案:

这个是因为编码的问题,当URL中有中文的时候,浏览器是会自动编码解析的,但是在客户端开发会遇到中文编码问题,所以必须做中文编码

先说下我今天跳的坑


但要注意不要写成下面的样子,在不能直接对我们拼接的URL全部进行编码,如果进行URL全部编码的话,把进行编码的URL粘贴到浏览器中,如http://apis.baidu.com/bbtapi/constellation/constellation_query?consName%3D%E5%8F%8C%E5%AD%90%E5%BA%A7%26type%3Dtoday,会发现多了点东西

[java]  view plain   copy
  1. String consName = "双子座";//星座名称,必须为十二星座名称  
  2.         String type = "today";//运势类型:today,tomorrow,week,nextweek,month,year  
  3.           
  4.         <pre name="code" class="java">StringBuilder sb = new StringBuilder();  
  5.             sb.append("consName=")  
  6.             .append(consName)//星座名称  
  7.             .append("&type=")  
  8.             .append(type);//运势类型  
String jsonString2;try {jsonString2 = HttpUtils.request(UrlUtils.XINGZUO_URL,URLEncoder.encode(sb.toString(),"utf-8").toString());System.out.println(jsonString2);XingZuoDay jsonday = GsonTools.getObjectData(jsonString2, XingZuoDay.class);System.out.println(jsonday.toString());} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}


应该写成下面的样子,只对中文进行编码,不对整个URL进行编码

[java]  view plain   copy
  1. String consName = "双子座";//星座名称,必须为十二星座名称  
  2.         String type = "today";//运势类型:today,tomorrow,week,nextweek,month,year  
  3.           
  4.           
  5.         String jsonString2;  
  6.         try {  
  7.             StringBuilder sb = new StringBuilder();  
  8.             sb.append("consName=")  
  9.             .append(URLEncoder.encode(consName,"utf-8"))//星座名称  
  10.             .append("&type=")  
  11.             .append(URLEncoder.encode(type,"utf-8"));//运势类型  
  12.             jsonString2 = HttpUtils.request(UrlUtils.XINGZUO_URL,sb.toString());  
  13.             System.out.println(jsonString2);  
  14.             XingZuoDay jsonday = GsonTools.getObjectData(jsonString2, XingZuoDay.class);  
  15.             System.out.println(jsonday.toString());  
  16.         } catch (UnsupportedEncodingException e) {  
  17.             // TODO Auto-generated catch block  
  18.             e.printStackTrace();  
  19.         }  
  20.           
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32811865/article/details/76473548

智能推荐

pg数据库连接失败:org.postgresql.util.PSQLException: ��������: û���������� “xx.xx.xxx.xx“,_org.postgresql.util.psqlexception: 尝试连线已失败。-程序员宅基地

文章浏览阅读2.1k次。在本地电脑写好了一个springboot + mybatis + pg的项目,在本地调试运行正常,将项目打成jar包在服务器上运行,当与pg交互时出现上述报错信息。上述表示允许IP地址为10.10.56.17的所有用户可以通过MD5的密码验证方式连接主机上所有的数据库。1)找到pg的安装路径,该路径下有个data文件夹,在data文件夹找到pg_hba.conf配置文件。2)打开pg_hba.conf配置文件,在ipv4下添加服务器ip,例如。3)修改后保存,打开pg终端,执行。_org.postgresql.util.psqlexception: 尝试连线已失败。

VScode下配置Go语言开发环境【2023最新】_vscode go-程序员宅基地

文章浏览阅读2.2w次,点赞49次,收藏130次。Windows 下安装和卸载 Go 及 vscode 环境配置【2023最新】_vscode go

Java毕业设计基于Springboot+vue的插画投稿网站_vue 插画-程序员宅基地

文章浏览阅读207次。插画投稿网站是提供给插画师们展示和分享自己作品的平台。这些网站通常允许插画师上传自己的作品,并与其他用户进行交流和互动。插画师可以在这些网站上展示自己的作品集,参与各种比赛和活动,与其他插画师进行合作,甚至有机会与潜在客户建立联系。是一个面向设计师和创意人才的社区平台,也是插画师展示作品的理想场所。在Dribbble上,插画师可以上传自己的作品,参与各种设计挑战和竞赛,与全球设计师社区互动,展示自己的创意和技能。_vue 插画

订单状态机-程序员宅基地

文章浏览阅读8k次,点赞8次,收藏57次。0 前言电商平台所有模块中,订单系统作为比较核心的模块,它决定了整个流程能不能顺畅的执行,起着承上启下的作用(下单、支付、履约、售后、清结算、营销活动)。订单系统的设计主要需要考虑订单字段、业务流程、状态机三大个方面,这些内容决定了订单系统稳定性与扩展性。2 订单流程订单流程指整个订单从产生到完成的整个流转过程,它包括正向流程和逆向的流程。3 订单状态机状态机表示了一笔订单的生命周期,按照一定的方向通过触发不同的事件产生数据流转的过程。状态机v2.0随着业务快速._订单状态机

Linux设备调试-GDB调试器-程序员宅基地

文章浏览阅读491次,点赞5次,收藏11次。工欲善其事,必先利其器”,为了方便Linux驱动设备的开发和调试,建立舒适的开发环境、使用必要的软件工具,以及掌握常用的调试技巧是比较重要的。本篇介绍GDB调试器的主要功能和常见用法,同时在第三部分中,命令顺序按照使用频率由高到低编写,方便阅读和使用。

nyoj-0613-免费馅饼(dp)-程序员宅基地

文章浏览阅读53次。nyoj-0613-免费馅饼 G. 免费馅饼都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameb...

随便推点

Matlab图像处理系列——图像复原之维纳滤波复原、约束最小二乘复原、L-R复原、盲去卷积图像复原_matlab维纳滤波图像复原-程序员宅基地

文章浏览阅读1.3k次,点赞21次,收藏22次。Lucky-Richardson(L-R)算法是非线性方法中一种典型的算法,在噪声信息未知时仍可得到较好的复原结果。维纳滤波又称为最小均方误差滤波,综合考虑了退化函数和噪声,找出一个原始图像f(x)的估值,使两者的均方误差较小。psf表示退化过程的点扩散函数,用于恢复psf和可能的加性噪声引起的退化;P(u,v)是函数p(x,y)的傅里叶变换,p(x,y)为拉普拉斯算子。Weight表示每个像素的加权值,记录了每个像素反应相机记录的质量。Dampar表示结果图像偏差的阈值,当偏差小于该值,算法停止迭代。_matlab维纳滤波图像复原

柔性数组详解-程序员宅基地

文章浏览阅读51次,点赞5次,收藏3次。这是结构体和动态内存管理的结合,事实上这个概念不常用,因为你会发现和线性表中的顺序表几乎如出一辙,区别只是一个是数组,一个是指针,都是需要动态申请内存。包含柔性数组的结构体的内存,用malloc函数申请内存,而由于结构体的大小不包括柔性数组,因此在开辟空间时要大于结构体的大小,用于预期柔性数组的使用。示例:(struct s*)malloc(sizeof(struct s) + 20);3、未知大小的 数组。

Memcache详解_memcached cachename-程序员宅基地

文章浏览阅读2.3k次。一、MemCached概念Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信二、MemCac_memcached cachename

python人工智能需要学多久,python人工智能学历要求-程序员宅基地

文章浏览阅读357次,点赞8次,收藏8次。作为一个学习者,什么样的学习方式、学习路径能够帮助我们更高效、便捷的入门人工智能,不至于错过奔驰而过的“AI”号列车?人工智能时代持续发展,成为新一轮产业变革的核心驱动力和引领未来发展的战略技术,不仅受到政策的支持,国内人工智能市场规模也在不断攀升,相应地对各行各业的人员也产生了巨大的影响,人工智能相关专业掀起了热潮,并且非计算机专业也被迫卷入“转型升级”的道路中。作为一项具有一定门槛的学科,如何避免陷入低效率的学习困境和低质量的培训陷阱?

PlugNT CMS v4.6.3 最新功能-程序员宅基地

文章浏览阅读61次。PlugNT CMS v4.6.3 最新功能:弃用标签 selected="commend,stick" 改为andwhere="commend=1 and stick=1"{tmp:baseif test="[tmp:field name="title"]" operate="equals" value="PlugNT"} {tmp:pagelist co..._true and stick

软考考点之软件质量管理及MCCALL_考试中质量属性 iso与mccall-程序员宅基地

文章浏览阅读458次。ISO 9126质量模型:软件质量模型的6大特性和27个子特性ISO9126软件质量模型是评价软件质量的国际标准,由6个特性和27个子特性组成,建议大家深入理解各特性、子特性的含义和区别,在测试工作需要从这6个特性和27个子特性去测试、评价一个软件。这个模型是软件质量标准的核心,对于大部分的软件,都可以考虑从这几个方面着手进行测评。一、功能性:1、适合性:提供了相应的功..._考试中质量属性 iso与mccall