OkHttp Post请求乱码
做Android开发中,向后台提交数据时,okhttp
是一个常用的组件,但是在前段时间的使用中,我发现使用okhttp
进行post提交中文参数时出现了乱码
这是在前台提交时断点,显示所有参数都是中文,还未出现乱码,之后也成功提交到了后台
而在后台接收的时候,中文参数全部乱码
这是怎么回事呢?首先我去看了服务端接收时的编码声明,确实是utf-8
那可能是客户端的问题,在请求提交的时候未进行编码设置
但是请求前也设置了参数编码,也还是乱码了。后来我查阅了资料,原来如果用FormBody
发送post
表单请求,就不能设置编码格式,contentType
方法没有暴露出来,默认也不是UTF-8,参数是汉字就会乱码。
所以换一种方式 ,用 RequestBody
,首先声明编码常量
//构建 POST 请求
private static Request createPostRequest(String url, Map<String, Object> parameters) {
StringBuffer sb = new StringBuffer();
//设置表单参数
for (String key: parameters.keySet()) {
//
sb.append(key+"="+parameters.get(key)+"&");
}
Log.i("TAG", ""+sb.toString());
RequestBody body = RequestBody.create(FORM_CONTENT_TYPE, sb.toString());
//创建请求
return new Request.Builder()
.url(url)
.post(body)
.build();
}
成功解决乱码问题!