OkHttp Post请求乱码

OkHttp Post请求乱码

做Android开发中,向后台提交数据时,okhttp是一个常用的组件,但是在前段时间的使用中,我发现使用okhttp进行post提交中文参数时出现了乱码

OkHttp Post请求乱码_第1张图片

这是在前台提交时断点,显示所有参数都是中文,还未出现乱码,之后也成功提交到了后台

而在后台接收的时候,中文参数全部乱码

OkHttp Post请求乱码_第2张图片

这是怎么回事呢?首先我去看了服务端接收时的编码声明,确实是utf-8

在这里插入图片描述

那可能是客户端的问题,在请求提交的时候未进行编码设置

OkHttp Post请求乱码_第3张图片

但是请求前也设置了参数编码,也还是乱码了。后来我查阅了资料,原来如果用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();
    }

OkHttp Post请求乱码_第4张图片

成功解决乱码问题!

你可能感兴趣的:(专题技术文献)