• HttpPost (URLConnection)传参数中文乱码


     1 client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1000000);
     2         client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 1000000);
     3         HttpPost post = new HttpPost(url);
     4         NameValuePair rq = new BasicNameValuePair("rq", requestObj.toString());
     5         BasicNameValuePair data_type = new BasicNameValuePair("type", req_type);
     6         NameValuePair sid = new BasicNameValuePair("sid", "web123");
     7         List<NameValuePair> list = new ArrayList<NameValuePair>();
     8         list.add(rq);
     9         list.add(sid);
    10         list.add(data_type);
    11         StringEntity entity = new UrlEncodedFormEntity(list, HTTP.UTF_8);
    12         post.setEntity(entity);
    13         HttpResponse res = client.execute(post);
    14         String respStr = EntityUtils.toString(res.getEntity(),HTTP.UTF_8);
    15         this.inputStream = new ByteArrayInputStream(respStr.toString().getBytes("utf-8"));
    16         return SUCCESS;

    方式二:

     1 //1、URL对象创建一个应用程序与url之间链接urlconnection对象 
     2         URL connectUrl = new URL(url);
     3         HttpURLConnection conn = (HttpURLConnection) connectUrl.openConnection();
     4         //2、设置属性
     5         //post请求必须设置的两个
     6         conn.setDoInput(true);
     7         conn.setDoOutput(true);
     8         //设置属性
     9         conn.setUseCaches(false);
    10         conn.setRequestProperty("accept", "*/*");
    11         conn.setRequestProperty("connection", "Keep-Alive");
    12         //打开与url之间的连接
    13         conn.connect();
    14         //如果使用URLconnection既要读取输入流 又要传参数 那么一定要先使用输出流 在使用输入流
    15         //getOutputStream 中包含了connect 也就是说使用了getoutputStream的时候connect可以不写
    16         OutputStream os = conn.getOutputStream();
    17         //设置编码 防止到服务端出现中文乱码
    18         OutputStreamWriter ow = new OutputStreamWriter(os, HTTP.UTF_8);
    19         PrintWriter pw = new PrintWriter(ow,true);
    20         //之前所有的参数只是写入写出流的缓存中并没有发送到服务端,执行下面这句话后表示将参数信息发送到服务端
    21         pw.println("rq="+requestObj.toString()+"&sid=web123&type="+req_type);
    22         pw.flush();
    23         //获取服务端返回的信息
    24         InputStream is = conn.getInputStream();
    25         //设置编码 防止读取到的数据乱码
    26         BufferedReader br = new BufferedReader(new InputStreamReader(is,HTTP.UTF_8));
    27         
    28         String line = null;
    29         String respStr = "";
    30         while((line=br.readLine())!=null){
    31             respStr+=line;
    32         }
    33         this.inputStream = new ByteArrayInputStream(respStr.toString().getBytes("utf-8"));
    34         return SUCCESS;

    在服务端接收到requestObj.toString()中文乱码 可用在创建Entity时指定编码  StringEntity entity = new UrlEncodedFormEntity(list, HTTP.UTF_8);

    在返回的数据中也出现了中文乱码 可使用EntityUtils.toString指定字符编码     String respStr = EntityUtils.toString(res.getEntity(),HTTP.UTF_8);

  • 相关阅读:
    C# TCP/IP 服务端 和 客户端
    (trigger)触发器的定义和作用
    AD账号登陆验证
    DES加密&解密字符串
    机器视觉(工业视觉)需要什么技能
    机器视觉对位贴合
    Halcon blob分析基本处理步骤
    cross_val_score 交叉验证与 K折交叉验证,嗯都是抄来的,自己作个参考
    50道SQL练习题及答案与详细分析(MySQL)
    MySQL8.0 ROW_NUMBER、RANK、DENSE_RANK窗口函数 分组排序排名
  • 原文地址:https://www.cnblogs.com/Wen-yu-jing/p/4089207.html
Copyright © 2020-2023  润新知