乱码问题不一定是在哪个环节上引起的,但要把住保存到数据库前的最后一关,也就是普通对象变成持久化对象前,属性的值是否是乱码,如果不是就在数据库上找原因,如果是那就在你的java代码里找原因 。

解决方案 »

  1.   

    问题可能是hibernate配置文件的某个属性有问题,不管你怎么转换字节码都不会有变化,这个问题我们老师也出过,最好用hibernate3.1的试一下
      

  2.   

    我用的就是hibernate3.1的,我觉得是数据库的问题,我是按照一个例子来做的,上面用的是Oracle数据库,插入中文数据就没有乱码问题,可是用mysql数据库插入后就显示问号
      

  3.   

    public String toChinese(String s){
            try {
               s = new String(s.getBytes("ISO-8859-1"),"GBK");
            } catch (UnsupportedEncodingException ex1) {
            }
            return s;
        }用这个转换试一下
      

  4.   

    在WEB.XML中加入:
    <filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>cn.jack.tool.SetCharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>在建立SetCharacterEncodingFilter.java
    内容为:所有的编码都要用UTF-8
    package cn.jack.tool;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 String encoding = null;
    protected FilterConfig filterConfig = null;
    protected boolean ignore = true;
    public void init(FilterConfig filterConfig) throws ServletException {
    this.filterConfig=filterConfig;
    this.encoding=filterConfig.getInitParameter("encoding");
    String value=filterConfig.getInitParameter("ignore");
    if(value==null)
    this.ignore=true;
    else if(value.equalsIgnoreCase("true"))
    this.ignore=true;
    else
    this.ignore=false;
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if (ignore || (request.getCharacterEncoding() == null)) {
    String encoding = selectEncoding(request);
    if (encoding != null)
    request.setCharacterEncoding(encoding);
    }
    chain.doFilter(request, response);
    }
    public void destroy() {
    this.encoding = null;
    this.filterConfig = null;
    }
    protected String selectEncoding(ServletRequest request) {
    return (this.encoding);
    }
    }最后在数据库链接字符串后加上?useUnicode=true&amp;characterEncoding=UTF-8
      

  5.   

    不会吧,这么复杂,如果oracle行的话,那可能是出在这个编码问题上了,oracle据说是用java编的,java用unicode码,而mysql使用C++编的,用的是ASCII码编的。所以要把unicode码,转成ASCII码保存
      

  6.   

    把你的插入数据的代码拈出来吧?
    估计是你直接用HSQL语句构造,然后插入吧?这样会产生乱码的!
    就算你加了个FiterCode,效果也一样.可以参考一下:http://blog.csdn.net/huzais/archive/2007/06/15/1653648.aspx
      

  7.   

    mysql数据库比较麻烦,其他数据库经过过滤都没有乱码了
      

  8.   

    考虑你的工程的Encode是什么类型比如是不是中文,然后数据库的encode是不是中文,如果是一致的那么可以不转换,当然如果是英文一般不会,就怕其它类型的!!