我们经常在程序中发送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 请求乱码相关推荐

  1. java http请求 乱码_怎么解决java中的http请求乱码

    怎么解决java中的http请求乱码 发布时间:2020-06-23 20:00:11 来源:亿速云 阅读:90 作者:元一 怎么解决java中的http请求乱码?针对这个问题,今天小编总结了这篇文章 ...

  2. Java Web乱码分析及解决方式(一)——GET请求乱码

    引言:     在进行Web開始时.乱码是我们最常常遇到也是最主要的问题.有经验的程序员非常easy能解决,刚開始学习的人则easy被泥潭困住. 并且非常多时候.我们即使攻克了乱码问题也是不明就里.往 ...

  3. Post请求和get请求乱码方式解决

    POST提交,提交页面显示中文乱码 //设置请求的编码格式request.setCharacterEncoding("utf-8");//设置响应的编码格式,与第一句的编码格式重复 ...

  4. java中文乱码decode_Java中文乱码处理

    java编码转换过程 我们总是用一个java类文件和用户进行最直接的交互(输入.输出),这些交互内容包含的文字可能会包含中文.无论这些java类是与数据库交互,还是与前端页面交互,他们的生命周期总是这 ...

  5. log中文乱码 springboot_springboot + shiro 权限注解、统一异常处理、请求乱码解决

    springboot + shiro 权限注解.统一异常处理.请求乱码解决 前篇 后台权限管理系统 20200808新版本更新 版本升级及内容优化版本,改动内容: 版本更新,springboot从1. ...

  6. java 奇数中文乱码_java web 乱码 整理

    众所周知 java 程序使用的是Unicode 编码字符集,是说java内存里面使用Unicode字符集操作文字,java内存外当然使用的是程序员自己制定的字符集,如果程序员没有指定字符集,那么会使用 ...

  7. java输出的汉字变成乱码_Java Web项目中解决中文乱码方法总结

    一.了解常识: 1.UTF-8国际编码,GBK中文编码.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.web tomcat:默认是ISO8859-1,不 ...

  8. Servlet--06--解决乱码问题; 请求转发; 重定向;

    乱码问题: 一.  请求-乱码问题:服务器获取的请求数据,在console显示时,出现了乱码. (1)post请求方式解决:req.serCharacterEncoding("utf-8&q ...

  9. servlet——请求乱码问题解决

    请求乱码问题解决 1.使用 String 进行重新编码:uname=new String(uname.getBytes("iso8859-1"),"utf-8" ...

最新文章

  1. Matplotlib实例教程 | 配色表 colors
  2. hdu 3863 No Gambling (不会证明,但是是对的,,)
  3. linux 企业数据,Linux企业数据标准出炉 IBM惠普等数巨头加盟
  4. 酷冷至尊官方psu计算工具_一款精致的电源,轻松应付高端配置、酷冷至尊MWE750金牌全模组电源 体验...
  5. 工具(1)---wireshark抓包
  6. 【B/S】ASP.NET---验证码-生成和切换
  7. 【Python】any() all() 用法
  8. 网易云音乐 网络错误 linux,Linux版网易云音乐播放音乐时无限显示“网络错误”的解决办法...
  9. Error in library(patRoon) : 不存在叫‘patRoon‘这个名字的程辑包
  10. 爪哇国新游记之七----使用ArrayList统计水果出现次数
  11. 新浪微博爬虫-抓取用户发布的微博
  12. 三大运营商物联卡哪家网络稳定
  13. 1 面向对象设计模式与原则
  14. esphome 在添加设备是出现错误
  15. 关于Android Studio HttpURLconnection使用时报错
  16. Vmware更新为16后,原本正常使用的虚拟机网络不通
  17. 讲解电脑重装系统后硬盘消失要如何解决
  18. 如何在黑苹果上开启HiDPI分辨率
  19. R学习笔记1:导入导出与变量清理
  20. Java基础篇之什么是BufferedReader

热门文章

  1. 一个神奇的数字货币,终结了南非小哥每天步行20公里的烦恼
  2. React与ES6(一)开篇介绍
  3. Codeforces 853C - Boredom
  4. AC日记——ISBN号码 openjudge 1.7 29
  5. linux笔记:文件系统管理-fdisk分区
  6. 深挖android low memory killer
  7. Java 范例 - 线程
  8. .Net中委托的协变和逆变详解
  9. window端口号被占用解决
  10. maven生成jar包