Retrofit2 urlencode 编码的问题

原创 2016年05月31日 10:03:17

前言

很抱歉,造成了将近2000位同仁看了之前的这篇博客,造成了错误的理解,在此说声抱歉,重写一次博客,修正一下之前的有问题的理解。

Retorfit Urlencode

其实Retorfit并不管理urlencode。所以所有关于Retorfit 设置Urlencode的方式都是无效的。
Github 上关于 Urlencode 相关问题中 JakeWharton 的回复

So Retrofit doesn’t actually control this. It comes from OkHttp’s FormBody type which uses this list for encoding. However, your server should be percent-decoding these values to the same thing. The whole point of percent encoding is to avoid ambiguity. In theory you could percent encode every single character. That said, the current set comes from the behavior of major browsers (Chrome and Firefox) so someone posting from an HTML form would produce the same version.

关于encoded 的设置

还是 JakeWharton在GitHub上的一个回复作为解释

encoded=true means your value was already encoded with respect to the requirements of form URL bodies. As you found, we simply tell OkHttp that this was the case, and if it meets OkHttp’s requirements for what passes as properly encoded it will be included unmolested. Otherwise OkHttp tries to correct the lack of proper encoding. It does not mean that the raw value you pass will always be used.

说的很清楚,这个值仅仅是一个建议值,它用来给Okhttp建议说,这个已经编码过了,但是如果在Okhttp检查的时候,这个不符合Urlencode的规则,那么还是会给你编码,而不是设置了这个值就使用你传递的字符串进行交互。

可以在这里额外考虑一下,如果设置为True 自行使用UrlEncode工具格式化之后,是否可以修复自动UrlEncode时出现的字符集问题?没测试过,只是一个猜想。。。

传递中文

github上有个问题
https://github.com/square/retrofit/issues/1815
其实就是传递中文字符串,开发组成员,回复的很直接,浏览器怎么做,Okhttp就怎么做了。所以汉字肯定是会在Get请求时,使用Urlencode编码的。

最终的建议

老老实实遵循Http协议。汉字还是不要用@GET @Query来传递了,用@POST @Field 或 @Body 来传递吧。
给大家带来的疑惑,非常抱歉。。

版权声明: 版权声明:本文为博主原创文章,如需转载请在文章中注明“转载”并在文章开头附上本博客链接。 举报

相关文章推荐

Retrofit乱码问题

我的错误是这样的,app在线更新需要在服务器放一个version.html文件,但是提示更新信息的时候出现乱码,本以为是服务器iis的问题,后来发现解决很简单,用记事本打开version.html文件...

是时候客观评价Retrofit了,Retrofit这几点你必须明白!

Tamic/CSDN 是时候客观评价下Retrofit了,retrofit客观存在的问题的你必须要知道!在用retrofit开发很久的朋友或多或少采了巨坑,阅读源码和实践后发现并不是我们认为的那么灵活...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

【Android实战】----Android Retrofit2.1.0设置编码格式GBK

设置接口如下: public interface IHttpService { @FormUrlEncoded() @POST("userapi.do?method=getUserB...

Retrofit掉坑记录(一)

随着项目的深入,Retrofit会深入学习,本系列应该当入坑先驱了,不说了,都是累1.@QueryMap AND @FieldMap 错用将会导致HTTP 414错误 首先借用HTTP 414的某百...

Retrofit中@Body的使用

关于Retrofit的参数标签@Field、@Path、@Query等等的使用网上已经有很多文章了,可是关于@Body的使用不仅少而且还都是略微的带过,这里就说下Body的用法。 首先@Body的作...

如何通过Retrofit提交Json格式数据

本文将介绍如何通过retrofit库post一串json格式的数据。首先post的json数据格式如下: {   "Id": "string",   "DeviceId": "string", ...

retrofit 进行 URLencode 结果出现乱码。

大家应该对URLencode 并不陌生, 一种编码格式,多应在网络请求的数据层。java 底层封装的方式是java.net.urlencode.encode()这个方法(全靠记忆,写错多包涵)。这个类...

Retrofit的使用与深入学习(上)

注意:以下分析都是基于Retrofit2 转载请注明出处:http://blog.csdn.net/evan_man 简单介绍     Retrofit发送网络请求通过okHttp,okhttp的诸多...

retrofit 请求后台接口url时参数中用URLEncoder.encode编码方式

有时候我们在和后台约定请求参数的时候会涉及到编码解码的问题,但是retrofit里面默认的编码方式很可能和后台的解码方式不一致,导致前端请求不到数据: try { exten...

Retrofit 接收字符串

在Retrofit1.9中,GsonConverter是默认包含在包里面的并且会在RestAdapter创建的时候自动创建。结果就是,如果返回的是Json字符串将会自动地被转换为数据存取对象Data ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)