博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HttpURLConnection 请求乱码
阅读量:7216 次
发布时间:2019-06-29

本文共 2311 字,大约阅读时间需要 7 分钟。

hot3.png

我们经常在程序中发送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(); } }

转载于:https://my.oschina.net/weiweiblog/blog/477321

你可能感兴趣的文章
SVN
查看>>
C语言编程写的一个http下载程序(王德仙)2012-04-08
查看>>
CCF201409-3 字符串匹配(100分)
查看>>
UVALive2203 UVa10042 Smith Numbers【质因数分解+素数判定+数位之和】
查看>>
Project Euler Problem 9: Special Pythagorean triplet
查看>>
HDU5701 中位数计数【中位数】
查看>>
Python 深浅拷贝 (Shallow copy and Deep copy in Python)
查看>>
Axure
查看>>
屏幕截取工具
查看>>
C语言第七次作业---要死了----
查看>>
Jquery事件绑定冲突
查看>>
偶现bug如何处理?
查看>>
yum命令简介
查看>>
【Udacity】朴素贝叶斯
查看>>
看漫画,学 Redux
查看>>
Spark Streaming揭秘 Day19 架构设计和运行机制
查看>>
【转载】WinCE OAL中的电源管理函数
查看>>
【iOS】Objective-C简约而不简单的单例模式
查看>>
Java实现扫码二维码登录
查看>>
python之字符串的操作和使用
查看>>