日期:2014-05-16  浏览次数:20368 次

jsp+mysql 中文乱码问题
jsp页面中输入中文数据,保存到mysql数据库中是乱码,从数据库中读取数据后在jsp页面显示还是乱码,要解决此问题需从以下几个方面考虑:
1、获得mysql的字符集
查看mysql字符集的命令是:
 mysql> show variables like "character_set_%";
  
character_set_system 总是utf-8 
这5个最好总是保持一致,
character_set_client    
character_set_connection
character_set_database  
character_set_results   
character_set_server
2、在jsp页面指定编码格式,保证跟mysql的字符集一致:
view plaincopy to clipboardprint?
  <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
 
3、web.xml添加字符编码过滤器,编码方式也要保证跟mysql的字符集一致:
view plaincopy to clipboardprint?
	<!-- 著名 Character Encoding filter -->  
	    <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>  
	    </filter>  
	  
	    <filter-mapping>  
	        <filter-name>encodingFilter</filter-name>  
	        <url-pattern>*.do</url-pattern>  
	    </filter-mapping>  
JSP页面提交后中文字符出现乱码-tomcat下中文乱码问题项目和页面都已设成了UTF-8编码形式; 
解决方法:
1) 设定请求的字符编码request.setCharacterEncoding("UTF-8");
2) 指定过滤类
这些天开发一个项目,服务器是tomcat,操作系统是xp,采用的是MVC架构,模式是采用 Facade模式,总是出现乱码,自己也解决了好多天,同事也帮忙解决,也参考了网上众多网友的文章和意见,总算是搞定。但是好记性不如烂笔杆,所以特意记下,以防止自己遗忘,同时也给那些遇到同样问题的人提供一个好的参考途径: 

4. JSP页面上是中文,但是看的是后是乱码: 
解决的办法就是在JSP页面的编码的地方,因为Jsp转成Java文件时的编码问题,默认的话有的服务器是ISO-8859-1,如果一个JSP中直接输入了中文,Jsp把它当作 ISO8859-1来处理是肯定有问题的,这一点,我们可以通过查看Jasper所生成的Java中间文件来确认 

5. 当用Request对象获取客户提交的汉字代码的时候,会出现乱码: 
解决的办法是:要配置一个filter,也就是一个Servelet的过滤器,代码如下: 
import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.UnavailableException; 

/** 
* Example filter that sets the character encoding to be used in parsing the 
* incoming request 
*/ 
public class SetCharacterEncodingFilter implements Filter { 

/** 
* Take this filter out of service. 
*/ 
public void destroy() { 
} 
/** 
* Select and set (if specified) the character encoding to be used to 
* interpret request parameters for this request. 
*/ 
public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain)throws IOException, ServletException { 

request.setCharacterEncoding("GBK"); 

// 传递控制到下一个过滤器 
chain.doFilter(request, response); 
} 

public void init(FilterConfig filterConfig) throws ServletException { 
} 
} 
配置web.xml 

Set Character Encoding 
SetCharacterEncodingFilter 


Set Character Encoding 
/* 

如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况,你的Form提交的数据是不是用get提交的,一般来说用post提交的话是没有问题的,如果是的话,你就看看第四中解决的办法。 
还有就是对含有汉字字符的信息进行处理,处理的代码是: 
package dbJavaBean; 

public class CodingConvert 
{ 
public CodingConvert() 
{ 
// 
} 
public String toGb(String uniStr){ 
String gbStr = ""; 
if(uniStr == null){ 
uniStr = ""; 
} 
try{ 
byte[] tempByte = uniStr.getBytes("ISO8859_1"); 
gbStr = new String(tempByte,"GB2312"); 
} 
catch(Exception ex){ 
} 
return gbStr; 
} 

public String toUni(String gbStr){ 
String uniStr = ""; 
if(gbStr == null){ 
gbStr = ""; 
} 
try{ 
byte[] tempByte = gbStr.getBytes("GB2312"); 
uniStr = new String(tempByte,"ISO8859_1"); 
}catch(Exception ex){ 
} 
return uniStr; 
} 
} 
你也可以在直接的转换,首先你将获取的字符串用ISO-8859-1进行编码,然后将这个编码存放到一个字节数组中,然后将这个数组转化成字符串对象就可以了,例如: 
String str=request.getParameter(“girl”); 
Byte B[]=str.getBytes(“ISO-8859-1”); 
Str=new String(B); 
通过上述转换的话,提交的任何信息都能正确的显示。 
6. 在Formget请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat的做法设置Filter也没有用或者用 request.setCharacterEncoding("GBK");也不管用问题是出在处理参数传递的方法上:如果在servlet中用 doGet(HttpServletRequest request, HttpServletResponse response)方法进行处理的话前面即使是写了: 
request.setCharacterEncoding("GBK"); 
respons