java urlconnection乱码_HttpURLConnection 请求乱码

我们经常在程序中发送Web请求,但是也经常在请求中出现乱码问题。下面的代码是发送请求的通用方法,但是在某些环境下中文会乱码,如何解决乱码问题呢?一开始的时候,我只想到对传入的参数进行

URLEncoder.encode(params.get("title"),"UTF-8");

然后在服务端发现接收的数据还是乱码,根本不用解码已经乱了,后面高人指点如下:

URLEncoder.encode(URLEncoder.encode(params.get("title"),"UTF-8"),"UTF-8");

然后在服务器端如下:

URLDecoder.decode(jsonvalue.get("title").toString(),"UTF-8");

终于得到了想要的中文。

总结:网络传输时,数据会被解析两次,第一次是在网络中,第二次是在服务器。如果我们在传输网络数据的时候没有加码,那么会解析为乱码,所以我们避免中文乱码,需要加码两次,第一次是让网络解析,解析过后还是加码的所有不会乱码,到服务器在解码问题就解决了。

/**

* 客户端发送HTTP请求通用POST方法

* @param url

* @param params

* @return

* @throws Exception

*/

public static String postHttpRequest(String url , Map params)throws Exception{

// 对空URL不处理

if(url == null || url.length() == 0) return null;

String result = null;

// 处理参数

String param = encodeUrlParams(params);

if(param != null && param.length() > 0){

if(url.contains("?")){

url = url + "&" + param;

}else{

url = url + "?" + param;

}

}

URL console = new URL(url);

HttpURLConnection conn = (HttpURLConnection)console.openConnection();

conn.setConnectTimeout(3000);//追加一个超时设置:3秒

conn.setRequestMethod("POST");// POST请求

conn.setRequestProperty("Content-type", "text/html");

conn.setRequestProperty("Accept-Charset", "utf-8");

conn.setRequestProperty("contentType", "utf-8");

// 开始连接

conn.connect();

InputStream is = conn.getInputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF8"));

StringBuffer sb = new StringBuffer();

String curLine="";

while ((curLine = reader.readLine()) != null) {

sb.append(curLine);

}

is.close();

result = sb.toString();

return result;

}

/**

* 处理参数

* @param param

* @return

* @throws UnsupportedEncodingException

*/

private static String encodeUrlParams(Map param) throws UnsupportedEncodingException{

StringBuilder bulider = new StringBuilder();

if(param != null){

Set keys = param.keySet();

for(String key : keys){

if(StringUtils.isBlank(param.get(key))){

bulider.append(key).append("=").append("").append("&");

}else{

bulider.append(key).append("=").append(param.get(key)).append("&");

}

}

}

if(bulider.length() > 0){

return bulider.substring(0, bulider.length()-1);

}

return bulider.toString();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值