我做的一个电子拍卖系统的项目(这是一个用struts1.2+hibernate3.1+spring2.0三大框架集成做的项目),出现了中文乱码问题,自己想尽办法还是搞不定,所以来求助大虾们。1.在我的web.xml文件中通过<jsp-config>标签我把所有页面的编码改成了UTF-82.自己手动添加了一个类来继承ActionServlet,并在其中加入了一个方法(方法里的参数我在这里就用..代替了)
process(..){
  request.setCharacterEncoding("utf-8");
  response.setCharacterEncoding("utf-8");
  super.process(..);
}
然后在web.xml文件中,我就让它加载我自己手写的这个类
结果我进行数据库操作时,居然插入到数据库中的中文字符都变成了乱码。
有谁能帮帮我呀?

解决方案 »

  1.   

    还是用过滤器比较好http://www.family168.com/tutorial/jsp/html/jsp-ch-02.html#jsp-ch-02-02
      

  2.   

    数据在存入数据库之前打到控制台上时是不是正码?
    什么数据库?以mysql为例,需要使用他的配置向导一路next,修改它的编码为utf-8,并重启,删掉表结构重新导入。
    另外有时jdbc存中文进去后从mysql控制台里看是乱码,但是用jdbc取出后仍是正码。
      

  3.   

    建议编码统一为 utf-8
    包括数据库 JSP
    可以在sturts.xml设置编码常量 <constant name="struts.i18n.encoding" value="utf-8" />
    数据库url加上编码 ?useUnicode=true&amp;characterEncoding=utf-8
    再不行 加上过滤器<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  4.   

    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 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() {
    // encoding
    this.encodingName = this.filterConfig.getInitParameter("encoding");
    // filter enable flag...
    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);
    }
    chain.doFilter(request, response);
    } public void destroy() {
    }}
    然后再web.xml文件中配置下
    <filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>com.yourcompany.common.framework.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>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  5.   

    1.最基本的在jsp页面上要把pageEncoding设置为中文,如: <%@ page language="java" pageEncoding="GBK"%> 2.对于表单的doPost()提交,也会出现中文出现乱码,可以在servlet里设置如下:request.setCharacterEncoding("GBK"),response.setCharacterEncoding("GBK"),不过此方法在每个servlet都要设置,很麻烦,建议写个过滤器设置。可以参考以下: 
        public void doFilter(ServletRequest request, ServletResponse response, 
    FilterChain chain) throws IOException, ServletException { HttpServletRequest request_1 = (HttpServletRequest) request; 
    HttpServletResponse response_1 = (HttpServletResponse) response; // 转换编码,并且加上去缓存 
    request_1.setCharacterEncoding("GBK"); 
    response_1.setCharacterEncoding("GBK"); 
    chain.doFilter(request, response); } 
    3、第三种就是 如果用doGet()提交,后面跟的参数如果也是中文,这个解决方法可以在tomcat或JBoss的配置文件里面配置,以tomcat为例: 
         <Connector port="8099" maxHttpHeaderSize="8192" 
                  maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
                  enableLookups="false" redirectPort="8443" acceptCount="100" 
                  connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 
      在这里面最后加上URIEncoding="GBK". 
    4、ajax也会产生乱码问题,这个问题可以在tomcat的配置那里解决。 5、文件上传时文件名也会出现乱码。 
    可以用此方法paramMap.put(fi.getFieldName(), new String(fi.getString().getBytes("ISO-8859-1"),"GBK"));
      

  6.   

    场合:页面本身有中文的时候
    解决办法:servlet:resp.setContentType("text/html;charset=gbk");
    Jsp: <%@ page contentType="text/html;charset=gb2312"%>
    注意:一定要写在PrintWriter out = resp.getWriter();之前
    场合:解决get方式乱码问题:
    解决办法:修改server.xml ?URIEncoding="GBK"
    场合:解决post方式提交内容的乱码
    解决办法:request.setCharacterEncoding("GBK");
    注意:一定要写在存取第一个参数之前
    不要调用response.setCharacterEncoding("GBK");
    场合:<jsp:param name="user" value="<%=s%>"/>,url地址包含中文参数
    解决办法:<%request.setCharacterEncoding("GBK");%>
      

  7.   


    怎么改数据库的编码?我的数据库用的是oracle9i
      

  8.   

    spring有个过滤器 web.xml配置一下
      

  9.   

    请问用spring这个过滤器的话,应该要配置初始化参数吧?不然它怎么知道我是用的utf-8还是gbk?
      

  10.   


    <filter>
    <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  11.   

    过滤器(上边有人已经列出方法)
    使用String.getBytes("")
    修改服务器的server。xml文件
      

  12.   


    在eclipse里面把文件属性里面的编码也改成utf-8