转自:http://blog.csdn.net/hwj3747/article/details/53635539

Java使用HttpURLConnection请求rest接口的时候出现了POST请求出现中文乱码的问题,经过把传入的String通过多种方法进行编码发现都解决不了,如下:

  1. String teString=new String("你好".getBytes("ISO-8859-1"),"UTF-8");

网上HttpURLConnection的请求通常是这样子的:

  1. public static String PostRequest(String URL,String obj) {
  2. String jsonString="";
  3. try {
  4. //创建连接
  5. URL url = new URL(URL);
  6. HttpURLConnection connection = (HttpURLConnection) url
  7. .openConnection();
  8. connection.setDoOutput(true);
  9. connection.setDoInput(true);
  10. connection.setRequestMethod("POST"); //设置请求方法
  11. connection.setRequestProperty("Charsert", "UTF-8"); //设置请求编码
  12. connection.setUseCaches(false);
  13. connection.setInstanceFollowRedirects(true);
  14. connection.setRequestProperty("Content-Type",
  15. "application/json");
  16.  
  17. connection.connect();
  18.  
  19. //POST请求
  20. DataOutputStream out = new DataOutputStream(
  21. connection.getOutputStream()); //关键的一步
  22.  
  23. out.writeBytes(obj);
  24. out.flush();
  25. out.close();
  26.  
  27. // 读取响应
  28. if (connection.getResponseCode()==200) {
  29. BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
  30. String lines;
  31. StringBuffer sb = new StringBuffer("");
  32. while ((lines = reader.readLine()) != null) {
  33. lines = new String(lines.getBytes(), "utf-8");
  34. sb.append(lines);
  35. }
  36. jsonString=sb.toString();
  37. reader.close();
  38. }//返回值为200输出正确的响应信息
  39.  
  40. if (connection.getResponseCode()==400) {
  41. BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream()));
  42. String lines;
  43. StringBuffer sb = new StringBuffer("");
  44. while ((lines = reader.readLine()) != null) {
  45. lines = new String(lines.getBytes(), "utf-8");
  46. sb.append(lines);
  47. }
  48. jsonString=sb.toString();
  49. reader.close();
  50. }//返回值错误,输出错误的返回信息
  51. // 断开连接
  52. connection.disconnect();
  53. } catch (MalformedURLException e) {
  54. // TODO Auto-generated catch block
  55. e.printStackTrace();
  56. } catch (UnsupportedEncodingException e) {
  57. // TODO Auto-generated catch block
  58. e.printStackTrace();
  59. } catch (IOException e) {
  60. // TODO Auto-generated catch block
  61. e.printStackTrace();
  62. }
  63. return jsonString;
  64. }

需要注意的是返回值为200时,connection.getInputStream()才有值,返回值为400时connection.getInputStream()是空的,connection.getErrorStream()才有值。

以上是大多数网上博客文章的写法,但是我用这种方法遇到了中文乱码的问题。在out.writeBytes(obj);这一步无论对obj这个字符串怎样转换,得到的结果还是乱码,最终得到的解决方法是这样的:
把这个部分代码,

  1. DataOutputStream out = new DataOutputStream(
  2. connection.getOutputStream()); //关键的一步
  3. out.writeBytes(obj);

改成

  1. PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(),"utf-8"));
  2. out.println(obj);

解决。

Java HttpURLConnection模拟请求Rest接口解决中文乱码问题的更多相关文章

  1. java web过滤器实际应用(解决中文乱码 html标签转义功能 敏感字符过滤功能)

    转载地址:http://www.cnblogs.com/xdp-gacl/p/3952405.html 在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可 ...

  2. Java读写.properties文件实例,解决中文乱码问题

    package com.lxk.propertyFileTest; import java.io.*; import java.util.Properties; /** * 读写properties文 ...

  3. JAVA File方法文本复制读写-解决中文乱码

    import java.io.*; public class TextFile { public static void main(String[] args) throws Exception { ...

  4. java web 中有效解决中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别

    这里先写几个大家容易搞混的编码设置代码: 在jsp代码中的头部往往有这两行代码 pageEncoding是jsp文件本身的编码contentType的charset是指服务器发送给客户端时的内容编码J ...

  5. Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)

    Java ZIP压缩和解压缩文件(解决中文文件名乱码问题) 学习了:http://www.tuicool.com/articles/V7BBvy 引用原文: JDK中自带的ZipOutputStrea ...

  6. java解压多目录Zip文件(解决中文乱码问题)--转载

    原文地址:http://zhangyongbo.iteye.com/blog/1749439 import java.io.BufferedOutputStream; import java.io.F ...

  7. 在线HTTP POST/GET模拟请求api接口http请求测试工具https://post.jsonin.com/

    在线HTTP POST/GET模拟请求api接口http请求测试工具 在线POST/GET接口测试工具https://post.jsonin.com/ Json在线解析及格式化校验工具 https:/ ...

  8. request/response解决中文乱码!!!

    Request中文乱码问题以及解决方案 补充三个知识点: Get是URL解码方式.默认解码格式是Tomcat编码格式.所以URL解码是UTF-8,覆盖掉了request容器解码格式 Post是实体内容 ...

  9. 微信二维码支付-模式一(PC端,解决中文乱码问题)

    近期公司调完银联,调支付宝,调完支付宝调微信.说实话微信的帮助文档确实是烂,而且有没有技术支持,害的我头发都掉了一桌.不说废话了,看代码. 首先登陆微信的公众平台(微信的服务号不是订阅号),然后选择微 ...

随机推荐

  1. [转]OData and Authentication – Part 6 – Custom Basic Authentication

    本文转自:https://blogs.msdn.microsoft.com/astoriateam/2010/07/21/odata-and-authentication-part-6-custom- ...

  2. jquery选择器【总结】

    本文总结整理了jquery里和选择器相关的所有方法,通过这篇文章,可以让你学习到在jquery里使用选择器的所有方法. 一:基本选择器: $("#aijquery") 选择id值等 ...

  3. 用户IP地址的三个属性的区别(HTTP_X_FORWARDED_FOR,HTTP_VIA,REM_addr)

    一.没有使用代理服务器的情况: REMOTE_ADDR = 您的 IP      HTTP_VIA = 没数值或不显示      HTTP_X_FORWARDED_FOR = 没数值或不显示 二.使用 ...

  4. web.xml文件初始化过程

    在使用各种框架后,有时会发现不了了错误处在哪里,了解Servlet的初始化过程(也可以说是web.xml的初始化吧),也许对你对于框架的理解与报错的原因理解会有帮助 context-param > ...

  5. 使用 OLEDB 及 SqlBulkCopy 将多个不在同一文件夹下的 ACCESS mdb 数据文件导入MSSQL

    注:转载请标明文章原始出处及作者信息http://www.cnblogs.com/z-huifei/p/7380388.html 前言 OLE DB 是微软的战略性的通向不同的数据源的低级应用程序接口 ...

  6. django中的template部分

    模版部分 取值 {{key}} 语句块 {%for item in data%} {%extends 'base.html'%} 深度变量的查找(万能的句点号) 在到目前为止的例子中,我们通过 con ...

  7. rgbdslam 源代码的实现

    经过一番努力,终于跑通了felix.endres的rgbd slam v2 源码,中间遇到挺多问题.总结如下: (1) 关于SiftGPU问题:ERROR: SiftGPU cannot be com ...

  8. 微服务系列(二):使用 API 网关构建微服务

    编者的话|本文来自 Nginx 官方博客,是微服务系列文章的第二篇,本文将探讨:微服务架构是如何影响客户端到服务端的通信,并提出一种使用 API 网关的方法. 作者介绍:Chris Richardso ...

  9. poj 3070 Fibonacci 矩阵相乘

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7715   Accepted: 5474 Descrip ...

  10. SDOI2017 树点涂色——LCT the END

    Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...