get/post请求中文乱码问题

来源:互联网 发布:nike安卓抢鞋软件 编辑:程序博客网 时间:2024/05/02 06:54

 所有的过滤器都只对post请求起作用,在jsp页面中设置字符编码方式,都只是对表单提交请求时的post请求起作用,对get请求不能起到设置其字符编码的作用,在get请求中使用的是默认的编码方法,所以对get请求,应该在server.xml文件中设置URIEncoding="GBK"然后重启tomcat便可以实现解决中文乱码问题,但是不建议在href超链接请求中传达中文参数,也不建议在get请求中传递中文参数。另外对传递的部分中文实现传递和接收时的统一的编码方法在传达参数时使用"reply.jsp?title="+java.net.URLEncoder.encode(keywords)然后在接收参数页面使用keywords=new String(request.getParameter("keywords").getBytes("8859_1"));这种方式虽然暂时解决了中文乱码问题,但是在后期的维护和部署到其他的服务器时可以仍会会出现中文乱码了问题,所以不建议使用。


对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题

 request.setCharacterEncoding("utf-8");

而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上面的处理方法。应该这样:

   String str=request.getQueryString();

   //使用URLDecoder解码字符串

   String str1=java.net.URLDecoder.decode(str,"utf-8");

   String[] paraStrings=str1.split("&");

//paraStrings[0]就是第一个参数,依次类推...

   for(String paraString : paraStrings)

{

     String[] nameValue=paraString.split("=");

     //nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值

}

还有一种方法就是获取请求参数之后对请求参数值重新编码,也就是先将其转换成字节数组,再将字节数组重新解码成字符串。

  String str=request.getParameter("name");

  byte[] bytes=str.getBytes("ISO-8859-1");

  String name=new String(bytes,"utf-8");


第一步:

request.setCharacterEncoding("utf-8");

然后:

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8");

使用get传递中文数据的时候,在传参数之前先把参数进行转码:java.net.URLEncoder.encode(param);

接收的时候用语句java.net.URLDecoder.decode(param);再转回中文

表单提交(GET或POST)中文乱码解决方案    对于表单中POST方式提交的数据,只要在接收数据的JSP或者Servlet中正确设置


request.setCharacterEncoding参数,即将对客户端请求进行重新编码的编码设置成浏览器编码,就可以保证得到的参数编码正确


。有些读者可能会问,那如何得到浏览器编码呢?上面我们提过了,在默认请情况下,浏览器编码就是你在响应该请求的JSP页面或


者Servlet中response.setCharacterEncoding设置的值。   对于URL提交的数据和表单中GET方式提交的数据,在接收数据的JSP中


设置request.setCharacterEncoding参数是不行的,因为在Tomcat5.0版本以上中,默认情况下使用ISO- 8859-1对URL提交的数据和


表单中GET方式提交的数据进行重新编码(解码),而不使用该参数对URL提交的数据和表单中GET方式提交的数据进行重新编码(解


码)。要解决该问题,应该在Tomcat的配置文件的Connector标签中设置useBodyEncodingForURI或者 URIEncoding属性,其中


useBodyEncodingForURI参数表示是否用 request.setCharacterEncoding 参数对URL提交的数据和表单中GET方式提交的数据进行重


新编码,在默认情况下,该参数为false(Tomcat4.0中该参数默认为true); URIEncoding参数指定对所有GET方式请求(包括URL


提交的数据和表单中GET方式提交的数据)进行统一的重新编码(解码)的编码。 URIEncoding和useBodyEncodingForURI区别是,


URIEncoding是对所有GET方式的请求的数据进行统一的重新编码(解码),而useBodyEncodingForURI则是根据响应该请求的页面的


request.setCharacterEncoding参数对数据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码。所以对


于URL提交的数据和表单中GET方式提交的数据,可以修改 URIEncoding参数为浏览器编码或者修改useBodyEncodingForURI为true,


并且在获得数据的JSP页面中 request.setCharacterEncoding参数设置成浏览器编码
0 0
原创粉丝点击