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();
}
}
java urlconnection乱码_HttpURLConnection 请求乱码相关推荐
- java http请求 乱码_怎么解决java中的http请求乱码
怎么解决java中的http请求乱码 发布时间:2020-06-23 20:00:11 来源:亿速云 阅读:90 作者:元一 怎么解决java中的http请求乱码?针对这个问题,今天小编总结了这篇文章 ...
- Java Web乱码分析及解决方式(一)——GET请求乱码
引言: 在进行Web開始时.乱码是我们最常常遇到也是最主要的问题.有经验的程序员非常easy能解决,刚開始学习的人则easy被泥潭困住. 并且非常多时候.我们即使攻克了乱码问题也是不明就里.往 ...
- Post请求和get请求乱码方式解决
POST提交,提交页面显示中文乱码 //设置请求的编码格式request.setCharacterEncoding("utf-8");//设置响应的编码格式,与第一句的编码格式重复 ...
- java中文乱码decode_Java中文乱码处理
java编码转换过程 我们总是用一个java类文件和用户进行最直接的交互(输入.输出),这些交互内容包含的文字可能会包含中文.无论这些java类是与数据库交互,还是与前端页面交互,他们的生命周期总是这 ...
- log中文乱码 springboot_springboot + shiro 权限注解、统一异常处理、请求乱码解决
springboot + shiro 权限注解.统一异常处理.请求乱码解决 前篇 后台权限管理系统 20200808新版本更新 版本升级及内容优化版本,改动内容: 版本更新,springboot从1. ...
- java 奇数中文乱码_java web 乱码 整理
众所周知 java 程序使用的是Unicode 编码字符集,是说java内存里面使用Unicode字符集操作文字,java内存外当然使用的是程序员自己制定的字符集,如果程序员没有指定字符集,那么会使用 ...
- java输出的汉字变成乱码_Java Web项目中解决中文乱码方法总结
一.了解常识: 1.UTF-8国际编码,GBK中文编码.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.web tomcat:默认是ISO8859-1,不 ...
- Servlet--06--解决乱码问题; 请求转发; 重定向;
乱码问题: 一. 请求-乱码问题:服务器获取的请求数据,在console显示时,出现了乱码. (1)post请求方式解决:req.serCharacterEncoding("utf-8&q ...
- servlet——请求乱码问题解决
请求乱码问题解决 1.使用 String 进行重新编码:uname=new String(uname.getBytes("iso8859-1"),"utf-8" ...
最新文章
- Matplotlib实例教程 | 配色表 colors
- hdu 3863 No Gambling (不会证明,但是是对的,,)
- linux 企业数据,Linux企业数据标准出炉 IBM惠普等数巨头加盟
- 酷冷至尊官方psu计算工具_一款精致的电源,轻松应付高端配置、酷冷至尊MWE750金牌全模组电源 体验...
- 工具(1)---wireshark抓包
- 【B/S】ASP.NET---验证码-生成和切换
- 【Python】any() all() 用法
- 网易云音乐 网络错误 linux,Linux版网易云音乐播放音乐时无限显示“网络错误”的解决办法...
- Error in library(patRoon) : 不存在叫‘patRoon‘这个名字的程辑包
- 爪哇国新游记之七----使用ArrayList统计水果出现次数
- 新浪微博爬虫-抓取用户发布的微博
- 三大运营商物联卡哪家网络稳定
- 1 面向对象设计模式与原则
- esphome 在添加设备是出现错误
- 关于Android Studio HttpURLconnection使用时报错
- Vmware更新为16后,原本正常使用的虚拟机网络不通
- 讲解电脑重装系统后硬盘消失要如何解决
- 如何在黑苹果上开启HiDPI分辨率
- R学习笔记1:导入导出与变量清理
- Java基础篇之什么是BufferedReader