Android 向Tomcat服务器提交中文乱码问题解决

我们知道Android向服务器提交数据有很多方式,本文作者常用的是 模拟Http协议使用get或者post方式来提交。这时候如果提交的数据为中文,势必牵扯到乱码问题。


网上也有很多种方式(包括设置统一编码,或者对中文进行URL编码),也许是本文作者前期编码设置不一样,经过适用之后却只有一种可行。 就是将get方式改变为post方式来解决这个问题,附上android端与tomcat代码,希望能为初学android的朋友带来点帮助。

下面是Android客户端与Tomcat服务端使用的一个工具类代码,需要在下文中用到:

public class StreamTool {

	//从输入流中读取数据
	public static byte[] readInputStream(InputStream inStream) throws Exception{
		ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		while( (len = inStream.read(buffer)) !=-1 ){
			outSteam.write(buffer, 0, len);
		}
		outSteam.close();
		inStream.close();
		return outSteam.toByteArray();
	}
}

下面为post方式从Android向服务器提交数据代码,注意“conn.setRequestProperty”这个地方

public static String getPatients(String keShi) {
		
		String path1 = "http://192.168.1.226:8181/HPPatient/servlet/DBService1";
		
		try {
			byte[] data = (keShi).getBytes();
			URL url = new URL(path1);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(5 * 1000);
			conn.setRequestMethod("POST");
			conn.setDoOutput(true);
			conn.setRequestProperty("Content-Type", "text;charset=UTF-8");
			conn.setRequestProperty("Content-Length",
					String.valueOf(data.length));
			conn.getOutputStream().write(data);
			//得到响应吗
			if (conn.getResponseCode() == 200) {
				InputStream inStream = conn.getInputStream();
				byte[] data1 = StreamTool.readInputStream(inStream);
				inStream.close();
				return new String(data1, "GBK");
			}
			return "NetError";
		} catch (Exception e) {
			return "NetError";
		}
	}

下面为Tomcat服务器端接收代码:注意接收时为UTF-8,作者曾将两端编码统一为其他编码格式例如GBK,都呈现乱码问题。

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		if (request.getInputStream() != null) {
			
			try {
				//这样既可解决乱码
				String keShi = new String(StreamTool.readInputStream(request.getInputStream()),"UTF-8");
				//下面读者不必理会
				String data = DBUtils.getMessage(keShi);
				OutputStream out = response.getOutputStream();
				out.write(data.getBytes());
				out.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值