[JAVAEB实战篇]---HIbernate乱码

解决办法有两种:

第一种办法:分两步:

1、解决保存到数据库时出现的乱码问题。在 hibernate.cfg.xml 中添加两行:

<property name="connection.useUnicode">true</property> <property name="connection.characterEncoding">gbk</property>

这样,当数据保存时就不会出现乱码。

2、解决从数据库读出数据时的乱码问题。在读出数据后把数据转换为 gbk 编码。

如: new String(getName().getBytes("ISO8859_1"),"gbk"),这时生成的 String 就是可以正常显示的中文了。

第二种办法:(来自:http://www.cnblogs.com/josson/archive/2005/03/16/119619.html

1, mysql安装时设置字符集utf-8, jdbc驱动3.0.15以上. 2. hibernate配置文件中,加上属性 <property name="connection.useUnicode">true</property> <property name="connection.characterEncoding">UTF-8</property>

3. web.xml设置Filter =================================================

<filter>  

<filter-name>  

Set Web Application Character Encoding  

</filter-name>  

<filter-class>

cn.com.commnet.util.SetEncodeFilter

</filter-class>

<init-param>    

<param-name>defaultencoding</param-name>    

<param-value>UTF-8</param-value>  

</init-param>  

</filter>  

<filter-mapping>  

<filter-name>    

Set Web Application Character Encoding  

</filter-name>  

<url-pattern>/*</url-pattern>

</filter-mapping>

=============================================

SetEncodeFilter.java

public class SetEncodeFilter implements Filter {

   protected FilterConfig filterConfig = null;

   protected String defaultEncoding = null;


   public void init(FilterConfig arg0) throws ServletException {        

    this.filterConfig = arg0;        

    this.defaultEncoding = filterConfig.getInitParameter("defaultencoding");  

  }


  public void doFilter(ServletRequest request, ServletResponse response,  FilterChain chain) throws IOException, ServletException {        


    request.setCharacterEncoding(selectEncoding(request));        

    chain.doFilter(request, response);    

}

   public void destroy() {                  


   this.defaultEncoding = null;        

   this.filterConfig = null;    

}

 protected String selectEncoding(ServletRequest request) {

       return this.defaultEncoding;  

 }

}


你可能感兴趣的:(Hibernate)