解决HttpURLConnection请求时传中文参数乱码问题

您所在的位置:网站首页 url传递中文参数乱码 解决HttpURLConnection请求时传中文参数乱码问题

解决HttpURLConnection请求时传中文参数乱码问题

2024-07-15 02:15| 来源: 网络整理| 查看: 265

解决HttpURLConnection请求时传中文参数乱码

前提: 项目的编码是utf-8, 即要保证项目下所有文件的编码都是utf-8 示例代码如下:

/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8"); request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); String mobilePhone = request.getParameter("mobilePhone"); String realName = request.getParameter("realName"); realName = URLEncoder.encode(realName, "utf-8"); String params = "method=" + method + "&appId=" + appId + "&sign=" + sign + "×tamp=" + timestamp + "&mdn=" + mobilePhone + "&realName=" + realName; String returnStr = ApiUtil.getResult(Constants.CLOUD_API, params, "utf-8"); JSONObject jo = (JSONObject) JSONObject.parse(returnStr); response.getWriter().print(jo); response.getWriter().flush(); response.getWriter().close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }

realName可能出现中文, 我们对其进行URLEncoder编码, ApiUtil.getResult(Constants.CLOUD_API, params, "utf-8");这里传递utf-8参数

/** * @param urlStr * 请求的地址 * @param content * 请求的参数 格式为:name=xxx&pwd=xxx * @param encoding * 服务器端请求编码。如GBK,UTF-8等 * @return */ public static String getResult(String urlStr, String content, String encoding) { URL url = null; HttpURLConnection connection = null; try { url = new URL(urlStr); connection = (HttpURLConnection) url.openConnection();// 新建连接实例 connection.setConnectTimeout(2000);// 设置连接超时时间,单位毫秒 connection.setReadTimeout(2000);// 设置读取数据超时时间,单位毫秒 connection.setDoOutput(true);// 是否打开输出流 true|false connection.setDoInput(true);// 是否打开输入流true|false connection.setRequestMethod("POST");// 提交方法POST|GET connection.setUseCaches(false);// 是否缓存true|false connection.setRequestProperty("Accept-Charset", encoding); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + encoding); connection.connect();// 打开连接端口 DataOutputStream out = new DataOutputStream(connection .getOutputStream());// 打开输出流往对端服务器写数据 out.writeBytes(content);// 写数据,也就是提交你的表单 name=xxx&pwd=xxx out.flush();// 刷新 out.close();// 关闭输出流 BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), encoding));// 往对端写完数据对端服务器返回数据 // ,以BufferedReader流来读取 StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = reader.readLine()) != null) { buffer.append(line); } reader.close(); return buffer.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect();// 关闭连接 } } return null; }

标准的 HTTP POST 是一种 application/x-www-form-urlencoded 类型的网络表单,传递的参数都会被写入请求信息主体中。

connection.setRequestProperty("Accept-Charset", encoding); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + encoding);


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3