中文乱码问题

来源:互联网 发布:betterzip mac 破解 编辑:程序博客网 时间:2024/05/07 09:50
 

 

中文乱码问题

 

一、             Web页面(jsp)上的中文乱码:

问题描述:要把一个jsp页面上写入的一段中文显示到另一个jsp页面上时(或直接在控制台上显示)出现“???”这样的乱码。

 

解决(以Tomcat Web 服务器为基础):

1.   Tomcat安装目录下的conf/Web.xml中加入:

<servlet>

<servlet-name>jsp</servlet-name>

<init-param>

            <param-name>parameterEncoding</param-name>

            <param-value>gbk</param-value>

        </init-param>

        <init-param>

            <param-name>inputEncoding</param-name>

            <param-value>gb2312</param-value>

        </init-param>

        <init-param>

            <param-name>outputEncoding</param-name>

            <param-value>gb2312</param-value>

        </init-param>

        <init-param>

            <param-name>fileEncoding</param-name>

            <param-value>gb2312</param-value>

        </init-param>

        <init-param>

            <param-name>javaEncoding</param-name>

            <param-value>gb2312</param-value>

</init-param>

</servlet>

2.   Tomcat安装目录下的conf/servlet.xml中的Connector字段中加入设置:

<Connector port="8080" URIEncoding="GB2312" ……

3.   针对jsp页面的post提交:

在你建的Web工程中要添加下面的一个类:CharacterEncodingFilter.java

package shop.test;

 

import javax.servlet.*;

import javax.servlet.FilterConfig;

import javax.servlet.FilterChain;

import java.io.IOException;

 

/**

 * <p>Title: </p>

 *

 * <p>Description: </p>

 *

 * <p>Copyright: Copyright (c) 2007</p>

 *

 * <p>Company: SCAU</p>

 *

 * @author 李跃华

 * @version 1.0

 */

public class CharacterEncodingFilter implements Filter{

  public CharacterEncodingFilter() {

  }

  protected String encoding = null;

 

  protected FilterConfig filterConfig = null;

 

  protected boolean ignore = true;

 

  public void destroy() {

    this.encoding = null;

    this.filterConfig = null;

  }

  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 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 if (value.equalsIgnoreCase("yes"))

      this.ignore = true;

    else

      this.ignore = false;

 

  }

  protected String selectEncoding(ServletRequest request) {

    return (this.encoding);

  }

}

 

然后在你所建的Web工程中的web.xml文件中添加:

<filter>

    <filter-name>CharacterEncodingFilter</filter-name>

    <filter-class>shop.test.CharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>encoding</param-name>

      <param-value>GB2312</param-value>

    </init-param>

    <init-param>

      <param-name>ignore</param-name>

      <param-value>true</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>CharacterEncodingFilter</filter-name>

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

  </filter-mapping>

4.   大公告成

 

 

二、             MySqlJBuilder2006 解决 中文乱码问题

1.  MySql数据库默认字符编码设置为gb2312或者gbk

2.  在建立项目时设置字符编码为gb2312或者gbk

3.  hibernate.cfg.xml中的设置如下:

<?xml version='1.0' encoding='gb2312'?>

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

 

<hibernate-configuration>

 

       <session-factory>

              <property name="myeclipse.connection.profile">

                     com.mysql.jdbc.Driver

              </property>

              <property name="connection.url">

                     jdbc:mysql://localhost/bookshop?

                        useUnicode=true&amp;characterEncoding=gb2312

                                 <--注意加上这句>

              </property>

              <property name="connection.username">root</property>

              <property name="connection.password">123456</property>

              <property name="connection.driver_class">

                     com.mysql.jdbc.Driver

              </property>

              <property name="dialect">

                     org.hibernate.dialect.MySQLDialect

              </property>

              <mapping resource="./shop/tables/Admin.hbm.xml" />

              <mapping resource="./shop/tables/Book.hbm.xml" />

              <mapping resource="./shop/tables/Bookcatalog.hbm.xml" />

 

       </session-factory>

 

</hibernate-configuration>

原创粉丝点击