版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CutelittleBo/article/details/49862299
给同事做一个小程序,模拟网页的post请求。
遇到问题,服务器是gb2312的编码,而okhttp默认返回和发送都换转成utf8的编码,造成数据返回变成了。。。乱码。。。
那么解决思路就是将编码转化为gb2312。
那么解决思路有了,那么怎么转换呢。。
找了些资料。
首先是将返回的数据解析成gb2312
在回调方法onResponse方法中
byte[] b = response.body().bytes(); //获取数据的bytes
String info = new String(b, "GB2312"); //然后将其转为gb2312
然后是post请求
默认使用FormEncodingBuilder可以构建键值队的post请求,但是它没办法更改参数的编码,如果需要更改就需要改源代码,没必要那么麻烦吧。
那么就使用RequestBody.create();
自己设置一系列的参数
RequestBody.create(MediaType.parse(“application/x-www-form-urlencoded;charset=gb2312”)
设置post类型是application/x-www-form-urlencoded
charset是gb2312
那么开始构建键值队
其实就是一个字符串
key1=value1&key2=value2
然后放到第二个参数里就行了
Request request = new Request.Builder().url(url)
.post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded;charset=gb2312"),内容))
.build();