在java开发中经常遇见汉字传输乱码的问题,特别是在夹杂着javascript和ajax的情况。最近在用android做一个手持终端的应用,移动终端需要调用服务器上部署的action,我采用post传值方式调用,关键代码如下:
FinalHttp fh = new FinalHttp();
try {
AjaxParams ajaxParams = new AjaxParams();
ajaxParams.put("theName", "");
ajaxParams.put("typeDesc", "快递公司");
fh.post("http://192.168.1.113:8080//bgxt_Expressinn/XHTML/user/DictonaryAction.action",ajaxParams, new AjaxCallBack<String>() {…调用失败或成功的处理…}
});
} catch (Exception e) {
// TODO Auto-generated catch block
//异常处理
}
}
http传值有get和post两种方式,get和post的区别在这里不作赘述,很多前辈在他们的博文中说的很清楚。以get方式传值http默认的编码格式为“ISO8859-1”,因此在使用的过程中我们需要进行转码,代码如下:
new String(request. getParameter(param).getBytes(“ISO8859-1”),”UTF-8”);
正常情况下用post方式传值一般不会出现乱码情况,以下情况需要注意会导致乱码:
- 客户端和服务端代码编码格式不同意,我今天就碰到了,android开发的代码格式为“UTF-8”而action的编码格式为“GBK”,这种情况就会出现乱码。
- 客户端和服务端的 inherited from container(从继承的容器),可以通过右击工程-》属性查看工程对应的inherited from container,如果android端的本属性为unix而服务器端的此属性为windows。
处理这种通过url地址传值的乱码我个人还是推荐使用java.net.URLEncoder.encode进行转码用java.net.URLDecoder.decode进行解码。具体使用代码如下:
转码:
String test =java.net.URLEncoder.encode("测试",“UTF-8”);//转码
AjaxParams ajaxParams = new AjaxParams();//post参数对象
ajaxParams.put("testFang", "test");
解码:
ActionContext ac = ActionContext.getContext();
HttpServletRequest request =(HttpServletRequest)ac.get(ServletActionContext.HTTP_REQUEST);//获取request对象
String testFang=request.getParameter("testFang");//获取request参数
String test2=java.net.URLDecoder.decode(testFang,"UTF-8");//解码