关闭

servlet中post与get请求中文乱码解决

1308人阅读 评论(0) 收藏 举报
分类:

一、乱码原因

①传输方和接收方采用的编码不一致。传输方对参数采用的是UTF-8编码而接收方却用GBK进行解析,当然是乱码。

②Tomcat服务器默认采用的ISO8859-1编码得到参数值。虽然①中采用了同样的编码方式,但经过tomcat一处理,也会出现乱码(GET方式)

 


二、解决办法


方法一 每次传输都手动设置编码(GET方式传输数据)

传输方
String name = URLEncoder.encode("张三","UTF-8");
String path = "http://localhost:8008/xyWeb/xyServlet?name=" + name;

接收方
String name = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");

先将数据转换为字节流然后转换为utf-8编码格式。
若传输方默认采用UTF-8编码就没有必要每次写,但接收方每次都写太烦,可考虑过滤器。

 

方法二(过滤器)

[java] view plain copy
 print?
  1. /** 
  2.  * 编码过滤器 
  3.  *  
  4.  * @author xy 
  5.  *  
  6.  */  
  7. public class EncodingFilter implements Filter  
  8. {  
  9.     private String encoding;  
  10.   
  11.     public void init(FilterConfig fConfig) throws ServletException  
  12.     {  
  13.         encoding = fConfig.getInitParameter("encoding");  
  14.     }  
  15.   
  16.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws Exception  
  17.     {  
  18.         HttpServletRequest httprequest = (HttpServletRequest) request;  
  19.         if ("GET".equals(httprequest.getMethod()))  
  20.         {  
  21.             // 将httpRequest进行包装  
  22.             EncodingHttpServletRequest wrapper = new EncodingHttpServletRequest(httprequest, encoding);   
  23.             chain.doFilter(wrapper, response);  
  24.         }  
  25.         else  
  26.         {  
  27.             request.setCharacterEncoding(encoding);  
  28.             response.setContentType("text/html;charset=" + encoding);  
  29.             chain.doFilter(request, response);  
  30.         }  
  31.     }  
  32.   
  33.     public void destroy()  
  34.     {  
  35.   
  36.     }  
  37.   
  38. }  
  39.   
  40.   
  41. /** 
  42.  * httpRequest进行包装类 
  43.  *  
  44.  * @author xy 
  45.  *  
  46.  */  
  47. public class EncodingHttpServletRequest extends HttpServletRequestWrapper  
  48. {  
  49.     private HttpServletRequest request;  
  50.     private String encoding;  
  51.   
  52.     public EncodingHttpServletRequest(HttpServletRequest request)  
  53.     {  
  54.         super(request);  
  55.         this.request = request;  
  56.     }  
  57.   
  58.     public EncodingHttpServletRequest(HttpServletRequest request,String encoding)  
  59.     {  
  60.         super(request);  
  61.         this.request = request;  
  62.         this.encoding = encoding;  
  63.           
  64.     }  
  65.     @Override  
  66.     public String getParameter(String name)  
  67.     {  
  68.         String value = request.getParameter(name);  
  69.         if (null != value)  
  70.         {  
  71.             try  
  72.             {  
  73.                 // tomcat默认以ISO8859-1处理GET传来的参数。把tomcat上的值用ISO8859-1获取字节流,再转换成UTF-8字符串  
  74.                 value = new String(value.getBytes("ISO8859-1"), encoding);  
  75.             }  
  76.             catch (UnsupportedEncodingException e)  
  77.             {  
  78.                 e.printStackTrace();  
  79.             }  
  80.         }  
  81.         return value;  
  82.     }  
  83.   
  84. }  
[html] view plain copy
 print?
  1. <filter>  
  2.   <display-name>EncodingFilter</display-name>  
  3.   <filter-name>EncodingFilter</filter-name>  
  4.   <filter-class>cn.xy.filter.EncodingFilter</filter-class>  
  5.   <init-param>  
  6.     <description></description>  
  7.     <param-name>encoding</param-name>  
  8.     <param-value>UTF-8</param-value>  
  9.   </init-param>  
  10. </filter>  
  11. <filter-mapping>  
  12.   <filter-name>EncodingFilter</filter-name>  
  13.   <url-pattern>/*</url-pattern>  
  14. </filter-mapping>  
2
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Servlet中文乱码原因 解决 Get 和 Post 和客户端

一、Get方式的中文乱码1) 使用如下页面表单内容: 用户名: 密 码:<b
  • lxf512666
  • lxf512666
  • 2016-10-26 23:14
  • 3729

过滤器解决get和post方式提交的中文乱码

对于国内的程序员来说,在做项目时避免不了的问题是中文乱码问题。        如果不使用过滤器的话,在每个servlet中都要进行设置编码,如果是post请求还好,但是如果是get请求,就要手动进行...
  • hyn150
  • hyn150
  • 2017-04-19 21:23
  • 1561

Get请求,Post请求乱码问题解决方案

之所以出现乱码,主要是由于编码和解码采用的方法不同。 因此保证编码解码格式一致是避免乱码发生的重要前提。 问题背景:JavaWeb技术下,Tomcat作为容器,发送请求的时候出现乱码问题。...
  • u014424628
  • u014424628
  • 2015-09-07 00:41
  • 8349

解决了中文乱码的http的get和post请求demo

  • 2016-10-21 09:58
  • 10.73MB
  • 下载

解决Servlet中get或post中文乱码问题

笔者在工作中遇到这个问题,第一次是POST中的中文乱码问题。在JSP页面中提交中文数据时,当时是用FF测试,发现没有问题,数据能提交而且能用Hibernate插入到数据库,之后用IE测试,发现不行,插...
  • Free_Wind22
  • Free_Wind22
  • 2014-09-07 15:54
  • 1172

JavaWeb项目的中文乱码的原因以及Servlet中处理GET请求和POST请求编码过滤器

一、乱码原因 ①传输方和接收方采用的编码不一致。传输方对参数采用的是UTF-8编码而接收方却用GBK进行解析,当然是乱码。 ②Tomcat服务器默认采用的ISO8859-1编码得到参数值。虽然①中...
  • woshixuye
  • woshixuye
  • 2012-12-14 15:49
  • 5833

get、post请求中文乱码处理方式一

  • 2013-07-20 23:19
  • 11KB
  • 下载

利用Filter全局中文过滤(get和post请求中文乱码问题)

  • 2016-10-23 15:30
  • 13KB
  • 下载

Servlet开发GET和POST中文乱码处理(原创)

Servlet开发GET和POST中文乱码处理(原创) 作者:余超 email:yuchao86@gmail.com tomcat在开发WEB服务器端程序的时候,我们经常遇到中文乱码的情况...
  • CYBEREXP2008
  • CYBEREXP2008
  • 2011-08-10 15:06
  • 4560

Get,Post请求中文乱码问题有效解决方法

对于做Java WEB项目同学来说,中文乱码问题是一个经常遇到而又非常头痛的问题,而最容易出现乱码的环节就是在浏览器向服务器发送请求的过程,至于出现乱码的原因不是本文的关注的重点,想了解的朋友可以参考...
  • figo0423
  • figo0423
  • 2017-05-18 14:30
  • 388
    个人资料
    • 访问:45347次
    • 积分:691
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:26篇
    • 译文:0篇
    • 评论:2条
    最新评论