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 进行 URLencode 结果出现乱码。

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

基于retrofit的网络框架的终极封装(二)-与retrofit的对接与解耦,以及遇到的坑

在上一篇基于retrofit的网络框架的终极封装(一)中介绍了顶层api的设计.这里再沿着代码走向往里说. 由于这里讲的是retrofit的封装性使用,所以一些retrofit基础性的使用和配置...

urlencode()与urldecode()函数字符编码原理详解

中文字符编码研究系列第五期,详解 urlencode()与urldecode()函数字符编码原理,两个函数分别用于编码 URL 字符串和解码已编码的 URL 字符串,实现对中文字符的编码 ...

Android Retrofit2+okhttp3详细配置,解决URL乱码的问题。

Android Retrofit2+okhttp3详细配置,解决URL乱码的问题。

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

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

Retrofit2 + OkHttp3下统一设置Http请求的Headers

在Retrofit和OkHttp3的环境下为请求设置通用的Headers

Retrofit 中文乱码问题

乱码问题要加上FormUrlEncoded 如果使用Query 后台接受会是乱码 如下: @FormUrlEncoded @POST(“/test/test”) Call register...
  • dao2012
  • dao2012
  • 2016年09月23日 16:06
  • 2908

Retrofit乱码问题

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

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

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

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

有时候我们在和后台约定请求参数的时候会涉及到编码解码的问题,但是retrofit里面默认的编码方式很可能和后台的解码方式不一致,导致前端请求不到数据: try { exten...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Retrofit2 urlencode 编码的问题
举报原因:
原因补充:

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