2 u012178928 u012178928 于 2016.03.31 22:01 提问

关于HttpURLConection的POST请求乱码
    我在用HttpURLConection发送POST请求时,并未包含中文,但自己测试时收到的请求前面总是包含几个乱码,
    求高手解决!
    代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUtil {

/**
 * 发送http POST请求
 * @param httpUrl  请求URL
 * @param httpContext 请求报文主体内容
 * @return
 * @throws IOException
 */
    public static String sendPost(String httpUrl,String httpContext) throws IOException{
        URL url = new URL(httpUrl);
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        connection.setRequestMethod("POST");
        // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true,默认情况下是false;   
        connection.setDoOutput(true);   
        connection.setRequestProperty("Content-Type","application/json; encoding=utf-8");
        connection.setRequestProperty("Connection", "keep-alive");


        OutputStream out = connection.getOutputStream();
        // 现在通过输出流对象构建对象输出流对象,以实现输出可序列化的对象。   
         ObjectOutputStream objOut = new ObjectOutputStream(out);   
         objOut.writeObject(httpContext);  // 向对象输出流写出数据,这些数据将存到内存缓冲区中
         out.close();
         objOut.close(); // 关闭对象输出流

         InputStream in = connection.getInputStream();
         InputStreamReader inr = new InputStreamReader(in);
         BufferedReader reader = new BufferedReader(inr);
         StringBuffer result = new StringBuffer();
         String temp;
         while((temp = reader.readLine()) != null){
             result.append(temp);
         }
         in.close();
         return result.toString();
    }

}图片说明

6个回答

CSDNXIAON
CSDNXIAON   2016.03.31 22:12

spring mvc post 请求乱码
spring mvc的乱码 post请求的响应
jQuery 发送 post 请求返回字符串乱码的解决
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

devmiao
devmiao   Ds   Rxr 2016.03.31 23:38
u011239468
u011239468   2016.03.31 23:43

你看你项目的编码什么编码。 这个很明显的。编码问题。一个一个排查。又没有几个。

luochoudan
luochoudan   Ds   Rxr 2016.03.31 23:59

你这边应该没问题,查一下服务端。

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.01 07:17

不是设置connection的编码,而是你获取响应流时读取InputStream的时候需要指定编码格式跟发送端的编码格式一致才行。
主要就是BufferedReader 读取响应流的代码,修正如下试试:

         InputStream in = connection.getInputStream();
         InputStreamReader inr = new InputStreamReader(in,"UTF-8");

指定编码格式跟发送端保持一致,其次,保证Eclipse工作空间的编码格式显示也是UTF-8或者GBK,就是需要数据发送编码格式,你读取数据的编码格式,Eclipse开发环境显示编码格式都一致。
耐心改改试试。

wojiushiwo945you
wojiushiwo945you 回复毕小宝: 这个InputStreamReader的默认编码就是UTF-8的.
一年多之前 回复
wojiushiwo945you
wojiushiwo945you 先改成gbk试试,可能发送端的数据是GBK的。
一年多之前 回复
dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.07.22 20:54

你可以试试OKHttp或者Volley

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!