HttpURLConnection使用POST方法参数乱码

来源:http://www.cnblogs.com/xianxh/p/4442019.html

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

 

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

1

2

3

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+ "\"\r\n\r\n"); 
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")即可!

 

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值