出錯描述:
jsp+mysql
中文亂碼
.
原因:
編碼不匹配
處理:
1.
首先建庫和建表的時候在后面加上這句ENGINE=InnoDB DEFAULT CHARSET=gb2312
如果mysql版本有支持gb2312的話那么可以在安裝的時候選擇gb2312,默認是lant1,這樣建庫和建表的時候就不用加上ENGINE=InnoDB DEFAULT CHARSET=gb2312了
2.
數(shù)據(jù)庫連接url要如下形式,后面要加上編碼方式
a>
直接在java代碼里面
jdbc:mysql://localhost:3306/jgaooa?useUnicode=true&characterEncoding=gb2312
b>
放在配置文件(配置文件最好是xml,并且xml文件頭也要有編碼方式<?xml version="1.0" encoding="GB2312"?>)
jdbc:mysql://localhost:3306/jgaooa?useUnicode=true&characterEncoding=gb2312
3.
每個jsp文件的文件頭要加上
<%@ page contentType="text/html;charset=gb2312" %>
不然頁面的中文會顯示亂碼
4.
頁面數(shù)據(jù)之間的傳輸request,response要加上編碼,最好的方式就是通過filter過濾器
過濾器代碼如下:該代碼由javastudio獲得
package org.jgao.soft;
?
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 {
?
??? // ----------------------------------------------------- Instance Variables
?
??? /**
???
?* The default character encoding to set for requests that pass through this
???
?* filter.
???
?*/
??? protected String encoding = null;
?
??? /**
???
?* The filter configuration object we are associated with. If this value is
???
?* null, this filter instance is not currently configured.
???
?*/
??? protected FilterConfig filterConfig = null;
?
??? /**
???
?* Should a character encoding specified by the client be ignored?
???
?*/
??? protected boolean ignore = true;
?
??? // --------------------------------------------------------- Public Methods
?
??? /**
???
?* Take this filter out of service.
???
?*/
??? public void destroy() {
?
??????? this.encoding = null;
??????? this.filterConfig = null;
?
??? }
?
??? /**
???
?* Select and set (if specified) the character encoding to be used to
???
?* interpret request parameters for this request.
???
?*
???
?* @param request
???
?*??????????? The servlet request we are processing
???
?* @param result
???
?*??????????? The servlet response we are creating
???
?* @param chain
???
?*??????????? The filter chain we are processing
???
?*
???
?* @exception IOException
???
?*??????????????? if an input/output error occurs
???
?* @exception ServletException
???
?*??????????????? if a servlet error occurs
???
?*/
??? public void doFilter(ServletRequest request, ServletResponse response,
??????????? FilterChain chain) throws IOException, ServletException {
?
??????? // Conditionally select and set the character encoding to be used
??????? if (ignore || (request.getCharacterEncoding() == null)) {
??????????? String encoding = selectEncoding(request);
??????????? if (encoding != null)
??????????????? request.setCharacterEncoding(encoding);
??????? }
?
??????? // Pass control on to the next filter
??????? chain.doFilter(request, response);
?
??? }
?
??? /**
???
?* Place this filter into service.
???
?*
???
?* @param filterConfig
???
?*??????????? The filter configuration object
???
?*/
??? 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 Methods
?
??? /**
???
?* Select an appropriate character encoding to be used, based on the
???
?* characteristics of the current request and/or filter initialization
???
?* parameters. If no character encoding should be set, return
???
?* <code>null</code>.
???
?* <p>
???
?* The default implementation unconditionally returns the value configured
???
?* by the <strong>encoding</strong> initialization parameter for this
???
?* filter.
???
?*
???
?* @param request
???
?*??????????? The servlet request we are processing
???
?*/
??? protected String selectEncoding(ServletRequest request) {
?
??????? return (this.encoding);
?
??? }
?
}//
?
Web.xml
配置文件如下
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
web-app
version
=
"2.4"
xmlns
=
"http://java.sun.com/xml/ns/j2ee"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://java.sun.com/xml/ns/j2ee
??? http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
?
???
<
filter
>
??????
<
filter-name
>
SetCharacterEncodingFilter
</
filter-name
>
???
???
<
filter-class
>
org.jgao.soft.SetCharacterEncodingFilter
</
filter-class
>
??????
<
init-param
>
??????????
<
param-name
>
encoding
</
param-name
>
??????????
<
param-value
>
GB2312
</
param-value
>
??????
</
init-param
>
???
</
filter
>
???
<
filter-mapping
>
??????
<
filter-name
>
SetCharacterEncodingFilter
</
filter-name
>
??????
<
url-pattern
>
/*
</
url-pattern
>
???
</
filter-mapping
>
</
web-app
>
再不能搞定那就把
mysql
扔了
|