我做的是一个小测试jsp和mysql和程序,就是用jsp页面传入的参数放入数据库后再读出来。刚开始的时候我没有用request.setCharacterEncodiing(“gb2312”)设置处理乱码,结果数据库里存入的是正确的汉字(既没有出现乱码),而页面上则出现了乱码,从数据库中读出后显示在页面上的数据是乱码!后面我在页面上设置了request.setCharacterEncoding(“gb2312”)后,还写了一个filter对请求进行了统一的编码成gb2312,这样直接在页面间传递的参数正常了,但是从mysql中取出的数据成乱码了,而且mysql中存入的也是乱码!请问各位大虾这个问题怎么解决?
我jdbc的连接地址是:jdbc:mysql://localhost:3306/mysqlencoding?useUnicode=true&characterEncoding=gb2312
我的Filter中的内容为:
package tian.bin.mysql;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;public class EncodingFilter implements Filter { private String charset="";
@Override
public void destroy() 
{ } @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException 
{
request.setCharacterEncoding(this.charset);
response.setCharacterEncoding(this.charset);
chain.doFilter(request, response);
} @Override
public void init(FilterConfig config) throws ServletException 
{
this.charset=config.getInitParameter("charset");
}}
其他页面都设置了request.setCharacterEncoding("gb2312");而且都是
<%@ page contentType="text/html;charset=gb2312"%>
就是不行?
请大家帮忙看看!谢谢了!

解决方案 »

  1.   

    数据库中用的是UTF-8吧,这样的话肯定会乱码的
      

  2.   

    在添加数据的时候  需要设置  在sql语句中添加一句这 set names GBK
      

  3.   

    servlet中的编码呢?
    建议全部用utf-8
    统一后,很难出现乱码
      

  4.   

    我先是全部用的gb2312,就是不知道怎么回事!我也测试全部用了utf-8,还是不行!??
      

  5.   

    第一种情况:
    数据库是否支持中文.创建数据库并添加数据测试,确保数据库支持中文。第二种情况:
    输入源出现乱码,一般情况是在jsp页面的表单数据提交到actionForm时产生的乱码,
    这种情况可以使用过滤器解决解决方案:a.设置jsp页面的编号为gbk
    <%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="GBK"%>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    b.配置过滤器:
    过滤器配置在web.xml文件中的<servlet>之后,经验。
    可以是自己定义字符过滤器,spring字符的过滤器。
    <!--spring的字符过滤器-->
     <filter>
        <filter-name>SpringCharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
         <param-name>encoding</param-name>
         <param-value>GBK</param-value>
        </init-param>
      </filter>
     <filter-mapping>
        <filter-name>SpringCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    <!--自定义字符过滤器-->
    import javax.servlet.Filter;   
    import javax.servlet.FilterConfig;   
    import javax.servlet.ServletException;   
    import javax.servlet.ServletRequest;   
       
    import javax.servlet.ServletResponse;   
    import javax.servlet.FilterChain;   
    import java.io.IOException;   
       
    public class SetCharacterEncodingFilter implements Filter {   
       
      protected FilterConfig filterConfig;   
      protected String encodingName;   
      protected boolean enable;   
       
      public SetCharacterEncodingFilter() {   
        this.encodingName = "UTF-8";   
        this.enable = false;   
      }   
       
      public void init(FilterConfig filterConfig) throws ServletException {   
        this.filterConfig = filterConfig;   
        loadConfigParams();   
      }   
       
      private void loadConfigParams() {   
        this.encodingName = this.filterConfig.getInitParameter("encoding");   
        String strIgnoreFlag = this.filterConfig.getInitParameter("enable");   
        if (strIgnoreFlag.equalsIgnoreCase("true")) {   
          this.enable = true;   
        } else {   
          this.enable = false;   
        }   
      }   
       
      public void doFilter(ServletRequest request, ServletResponse response,   
                           FilterChain chain) throws IOException, ServletException {   
        if(this.enable) {   
          request.setCharacterEncoding(this.encodingName);   
          response.setCharacterEncoding(this.encodingName);   
        }   
        chain.doFilter(request, response);   
      }   
       
      public void destroy() {   
      }   
       
    }   
    然后在web.xml中加入Filter的描述和参数配置:
     
    <filter>   
     <filter-name>SetCharacterEncoding</filter-name>    
     <filter-class>com.test.util.SetCharacterEncodingFilter</filter-class>   
     <init-param>    
      <param-name>encoding</param-name>    
      <param-value>UTF-8</param-value>   
     </init-param>   
     <init-param>   
      <param-name>enable</param-name>   
      <param-value>true</param-value>   
     </init-param>   
     </filter>   
     <filter-mapping>   
      <filter-name>SetCharacterEncoding</filter-name>   
      <servlet-name>action</servlet-name>   
     </filter-mapping> 
      

  6.   

    private String charset=""; 这个是啥意思?
    this.charset=config.getInitParameter("charset"); 
    你确信你读取到了正确的字符集了吗?
      

  7.   

    MySql在建库的时候是可以设置编码格式的~有些时候是因为这个照成的。