中文乱码问题
一、 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. 大公告成
二、 MySql在JBuilder2006中 解决 中文乱码问题
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&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>