JSP显示中文有乱码怎么办,用request得到的用户输入的中文怎么是乱码,把汉字写到数据库怎么是乱码,等等一些关于汉字乱码的问题。其实这个问题很简单,管它汉字不汉字,还是日文,还是其他的什么双字节的语言,我们一律把它当作UTF-8看待。

      (一)request中的双字节文字

      我们来实现在整个应用程序中使用UTF-8编码工作,之所以选择UTF-8不仅仅之于上述原因,我们知道java的就是基于在UTF-8之上的,所以我们选择UTF-8应该没错
首先把我们的.java, .jsp文件都用UTF-8编码来保存,如果以前的没有用UTF-8保存也无所谓,但是建议以后写的都用UTF-8来保存。

      并在.jsp里面写:


 

解决JSP中使用request乱码问题<%@page contentType="text/html; charset=UTF-8"%>而不是%@page contentType="text/html; charset=UTF-8"%>

 

  然后在web.xml添加下面一段:


 

解决JSP中使用request乱码问题<web-app> 
解决JSP中使用request乱码问题解决JSP中使用request乱码问题 
解决JSP中使用request乱码问题  
<filter> 
解决JSP中使用request乱码问题    
<filter-name>Set Character Encoding</filter-name> 
解决JSP中使用request乱码问题    
<filter-class>com.redv.projects.eduadmin.util.filters.SetCharacterEncodingFilter</filter-class> 
解决JSP中使用request乱码问题    
<init-param> 
解决JSP中使用request乱码问题      
<param-name>encoding</param-name> 
解决JSP中使用request乱码问题      
<param-value>UTF-8</param-value> 
解决JSP中使用request乱码问题    
</init-param> 
解决JSP中使用request乱码问题  
</filter> 
解决JSP中使用request乱码问题  
<filter-mapping> 
解决JSP中使用request乱码问题    
<filter-name>Set Character Encoding</filter-name> 



其中com.redv.projects.eduadmin.util.filters.SetCharacterEncodingFilter的代码如下:


解决JSP中使用request乱码问题package com.redv.projects.eduadmin.util.filters; 
解决JSP中使用request乱码问题
import java.io.IOException; 
解决JSP中使用request乱码问题
import javax.servlet.Filter; 
解决JSP中使用request乱码问题
import javax.servlet.FilterChain; 
解决JSP中使用request乱码问题
import javax.servlet.FilterConfig; 
解决JSP中使用request乱码问题
import javax.servlet.ServletException; 
解决JSP中使用request乱码问题
import javax.servlet.ServletRequest; 
解决JSP中使用request乱码问题
import javax.servlet.ServletResponse; 
解决JSP中使用request乱码问题
import javax.servlet.UnavailableException; 
解决JSP中使用request乱码问题
import javax.servlet.http.HttpServletRequest; 
解决JSP中使用request乱码问题
import javax.servlet.http.HttpServletResponse; 
解决JSP中使用request乱码问题
解决JSP中使用request乱码问题
public class SetCharacterEncodingFilter 






      这样,我们的request请求就是以UTT-8编码的,在JSP程序中就可以使用:request.getParameter("myKey")来直接得到UTF-8编码的字符串了,而不需要像这样:new String(request.getParameter("myKey").getBytes("ISO-8859-1"), "GBK")来解决那些乱码了。

 

 

      (二)数据库处理的双字节文字

      另外一个,就是写入数据库的问题,我们知道我们在使用mysql的时候可以改用这样的url来处理汉字编码问题:jdbc:mysql://localhost:3306/upas?useUnicode=true&characterEncoding=gb2312,那么对于那些我们无法像mysql这样解决的怎么办呢?难道我们每次都这样写吗:




解决JSP中使用request乱码问题import java.sql.*
解决JSP中使用request乱码问题Class.forName(
"org.gjt.mm.mysql.Driver"); 
解决JSP中使用request乱码问题Connection con 
= null
解决JSP中使用request乱码问题PreparedStatement pstmt 
= null
解决JSP中使用request乱码问题ResultSet rs 
= null


      其实我们完全可以这样写:
 


解决JSP中使用request乱码问题import java.sql.*
解决JSP中使用request乱码问题
import com.redv.sql.encoding.*
解决JSP中使用request乱码问题Class.forName(
"org.gjt.mm.mysql.Driver"); 
解决JSP中使用request乱码问题Connection con 
= null
解决JSP中使用request乱码问题PreparedStatement pstmt 
= null
解决JSP中使用request乱码问题ResultSet rs 
= null

 

相关文章: