首页 > 代码库 > url传值乱码 encode转码和decode解码

url传值乱码 encode转码和decode解码

在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方式传值一般不会出现乱码情况,以下情况需要注意会导致乱码:

 

  1. 客户端和服务端代码编码格式不同意,我今天就碰到了,android开发的代码格式为“UTF-8”而action的编码格式为“GBK”,这种情况就会出现乱码。
  2. 客户端和服务端的 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");//解码