安卓httprul post方式上传中文乱码问题解决方案

    在使用httpurl post方式和服务器端jsp进行交互时,出现了写入中文乱码问题,且此时jdbc没有问题,服务器端mysql已配置好utf-8码制。此时可以确定问题是本地代码中post请求写入变量代码存在问题。给出代码作为案例:

public void send() {  //获取数据
		String target = "服务器端jsp地址"; // 要提交的目标地址
		URL url;
		try {
			url = new URL(target);
			HttpURLConnection urlConn = (HttpURLConnection) url
					.openConnection(); // 创建一个HTTP连接
			urlConn.setRequestMethod("POST"); // 指定使用POST请求方式
			urlConn.setDoInput(true); // 向连接中写入数据
			urlConn.setDoOutput(true); // 从连接中读取数据
			urlConn.setUseCaches(false); // 禁止缓存
			urlConn.setInstanceFollowRedirects(true); // 自动执行HTTP重定向
			urlConn.setRequestProperty("Content-Type",
					"application/x-www-form-urlencoded"); // 设置内容类型
			DataOutputStream out = new DataOutputStream(
					urlConn.getOutputStream()); // 获取输出流
			String sql="SELECT  *  	FROM  course " 
					+ " where coursecademy	='"+ ac +"'and  coursedepartment	='"+de+"' "
					+"and coursename not in(select courseid from chooseinfo where userid='"+user+"');";
			//传入学院  专业  和学生id
			Log.e("此处", ac);
			Log.e("此处", de);
			String param = "sql=" + URLEncoder.encode(sql, "utf-8"); // 连接所要提交的数据
			out.writeBytes(param);// 将要传递的数据写入数据输出流
			out.flush(); // 输出缓存
			out.close(); // 关闭数据输出流
			// 判断是否响应成功
			if (urlConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
				InputStreamReader in = new InputStreamReader(
						urlConn.getInputStream()); // 获得读取的内容
				BufferedReader buffer = new BufferedReader(in); // 获取输入流对象
				String inputLine = null;
				strres = "";
				while ((inputLine = buffer.readLine()) != null) {
					strres += inputLine ;
				}
				in.close(); // 关闭字符输入流
			}
			urlConn.disconnect(); // 断开连接
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
    以上为一个使用httpurl post方式进行信息发送的代码,有详细注释,很容易看懂。

注意传入的sql变量已经进行了utf-8编码,此时传入英文没有问题,但传入中文会出现乱码。

    解决方法:将urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");改为: urlConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded; charset=utf-8");  即可。

    特记下,以备后日回顾。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值