java httpurlconnection 中文参数乱码_解决HttpURLConnection请求时传中文参数乱码问题...

解决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

+ "&timestamp=" + 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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值