`
退役的龙弟弟
  • 浏览: 446110 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

springmvc controller和servlet中文乱码问题

 
阅读更多

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

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

 

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

 

<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>*.jsp</url-pattern>
</filter-mapping>

 

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

 

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

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

//1、type如果是中文,很可能存在中文乱码问题。因为tomcat使用iso-8859-1解析中文,这样必然导致乱码。
String type = request.getParameter(Params.TYPE);

//2、对type使用utf8进行解析:将iso-88590-1编码的字符串使用utf-8进行编码
res = new String(type.getBytes("iso-8859-1"),"UTF-8");

 

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

第一种方法:

//getWriter()方法将 输出编码设置成iso-8859-1,这样输出utf8编码字符串必然乱码
PrintWriter pw = response.getWriter();
//1、			
//response.setCharacterEncoding("UTF-8");
//2、
response.setContentType("text/html; charset=utf-8");
			pw.write(resStr);
			pw.flush();
			pw.close();

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

 第二种方法:

 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"));   
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics