springmvc controller和servlet中文乱码问题

来源:互联网 发布:决策树源码 编辑:程序博客网 时间:2024/05/19 23:16

http://tydldd.iteye.com/blog/2071869

springmvc controller和servlet中文乱码问题

    博客分类: 
  • javaweb
 

一、第一种方法通过tomcat配置和spring编码过滤器解决中文乱码

1、修改tomcat配置文件server.xml

 

Xml代码  收藏代码
  1. 修改tomcat下的conf/server.xml文件  
  2. 找到如下代码:      
  3. <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />  
  4. 这段代码规定了Tomcat监听HTTP请求的端口号等信息。  
  5. 可以在这里添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat(默认ISO-8859-1编码)以UTF-8的编码处理get请求。  
  6. 修改完成后:  
  7. <Connector port="8080"  protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />  
 2、spring编码过滤器,在web.xml中配置编码过滤器

 

Xml代码  收藏代码
  1. <filter>  
  2.     <filter-name>encodingFilter</filter-name>  
  3.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  4.     <init-param>  
  5.         <param-name>encoding</param-name>  
  6.         <param-value>UTF-8</param-value>  
  7.     </init-param>  
  8.     <init-param>  
  9.         <param-name>forceEncoding</param-name>  
  10.         <param-value>true</param-value>  
  11.     </init-param>  
  12. </filter>  
  13. <filter-mapping>  
  14.     <filter-name>encodingFilter</filter-name>  
  15.     <url-pattern>/*</url-pattern>  
  16. </filter-mapping>  
  17. <filter-mapping>  
  18.     <filter-name>encodingFilter</filter-name>  
  19.     <url-pattern>*.jsp</url-pattern>  
  20. </filter-mapping>  

 

二、第二种方法。使用上面的配置基本可以解决问题了。但是如果没有使用springmvc不能使用编码过滤器,可以分别request和response做处理。

 

servlet或者springmvc的request和response的乱码问题

1、request 使用url传递中文参数(如http get)乱码问题。

Java代码  收藏代码
  1. //1、type如果是中文,很可能存在中文乱码问题。因为tomcat使用iso-8859-1解析中文,这样必然导致乱码。  
  2. String type = request.getParameter(Params.TYPE);  
  3.   
  4. //2、对type使用utf8进行解析:将iso-88590-1编码的字符串使用utf-8进行编码  
  5. res = new String(type.getBytes("iso-8859-1"),"UTF-8");  

 

2、response    输出中文字符串乱码

第一种方法:

Java代码  收藏代码
  1. //getWriter()方法将 输出编码设置成iso-8859-1,这样输出utf8编码字符串必然乱码  
  2. PrintWriter pw = response.getWriter();  
  3. //1、              
  4. //response.setCharacterEncoding("UTF-8");  
  5. //2、  
  6. response.setContentType("text/html; charset=utf-8");  
  7.             pw.write(resStr);  
  8.             pw.flush();  
  9.             pw.close();  
  10.   
  11. setContentType 和 setCharacterEncoding两方法中设定characterEncoding的方法对服务器效果一致,不需要反复调用。在输出文本内容时,采用response.setContentType("text/html; charset=utf-8");似乎更为方便。  

 第二种方法:

Java代码  收藏代码
  1. PrintWriter out =  new PrintWriter(new OutputStreamWriter(new FileOutputStream(), "UTF-8"));  

 

 

总结:

1.在servlet中输出中文,如果采用PrintWriter方式,需要在调用getPrintWriter()之前调用setContentType 或者 setCharacterEncoding;采用ServletOutputStream方式,不受此限。

 

2.setContentType 和 setCharacterEncoding两方法中设定characterEncoding的方法对服务器效果一致,不需要反复调用。在输出文本内容时,采用response.setContentType("text/html; charset=utf-8");似乎更为方便。

 

3.PrintWriter自身并没有处理编码的职责,它还是应该看成一个装饰器比较好:它就是为了输出更方便而设计的,提供print、println、printf等便利方法。要设置编码的话,可以在它的底层Writer上设置:(这里以OutputStreamWriter为底层Writer),参考:

 

  1. new PrintWriter(new OutputStreamWriter(new FileOutputStream("yourfilepath"), "UTF-8"));   
0 0
原创粉丝点击