zoukankan      html  css  js  c++  java
  • HttpURLConnection使用POST方法参数乱码

    如题,HttpURLConnection使用POST方法发起http请求,参数通过form来传递(并非使用URL传递参数),出现了中文乱码的情况。

    具体描述为:将请求参数以

    Content-Disposition: form-data; name="name" 
    
    value
    

    形式上传,然后使用OutputStream.write传送,结果中文参数会出现乱码。

    因为调用的方法是另外的人开发的系统,他们设定了通过UTF-8解码读取,所以要求调用时使用UTF-8进行编码后才可进行。

    百度谷歌了一下解决方法,有教charset设置UTF8的,如

    HttpURLConnection conn = null; 
    conn.setRequestProperty("Content-Type",   "multipart/form-data; charset=UTF-8; ");

    也有很复杂的,每次参数拼接都设定编码的,如

     // 首先组拼文本类型的参数
            StringBuilder sb = new StringBuilder();
            for (Map.Entry<String, String> entry : params.entrySet())
            {
                sb.append(PREFIX);
                sb.append(BOUNDARY);
                sb.append(LINEND);
                sb.append("Content-Disposition: form-data; name="" + entry.getKey() + """ + LINEND);
                sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
                sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
                sb.append(LINEND);
                sb.append(entry.getValue());
                sb.append(LINEND);
            }

    但是,这些方法都试用遍了,还是没有起效。

    后来我通过这样,解决了问题:

     StringBuffer strBuf = new StringBuffer();  

    strBuf.append("Content-Disposition: form-data; name=""
    + name+ "" ");
    strBuf.append(value);

    out.write(strBuf.toString().getBytes("UTF-8"));  

    代码不是完整的。不过做法是很简单的。只需保持原本StringBuffer将参数的key和value拼接在Content-Disposition: form-data; name=的过程,最后,out.write一个byte[]时,保证这个参数byte[]数组是UTF-8编码。原来的String.getBytes()换成String.getBytes("UTF-8")即可!

    有类似疑难的情况,可以这样解决!

  • 相关阅读:
    ASP.NET 学习日志
    igoogle 小工具
    nios ann 语音识别
    ASP 3.5 读书笔记
    C# delegate and event 续
    paper
    网站白痴的 ASP.NET website 学习日志
    盒子模型
    将对象序列化成json
    不错的Oracle 存储过程例子
  • 原文地址:https://www.cnblogs.com/xianxh/p/4442019.html
Copyright © 2011-2022 走看看