先說下本身的開發環境:jsp+Eclipse+mysql+tomcat,如今通常習慣在DW(dreadweaver)下寫jsp代碼,是經過一個javaBean把數據插入到mysql數據庫的。測試後發現英文成功了,但中文現出了:「???」這樣的亂碼,第一反應是直接在mysql 裏執行插入中文語句,mysql成功了,沒有出現亂碼。因而上網找了不少資料:html
其實不管是用什麼編碼:gb2312或者utf-8,都要遵循編碼統一的道理。就是說若是你在頁面中採用了utf-8,那麼你建mysql表時也如此,如下是如處須要統一的地方:java
在jsp頁面的<%@ page 位置加上 contentType=」text/html; charset=utf-8″ %>,<meta 的位置也是如此:content=」text/html;charset=utf-8″ />mysql
創建一個mysql數據庫,字符集採用utf-8,建表也是如此。web
在getConnection的URL中加上:?useUnicode=true&characterEncoding=UTF-8″,如:url = 「jdbc:mysql://localhost:3306/(此處爲數據庫名稱)?useUnicode=true&characterEncoding=UTF-8″,也就是在(數據庫名稱)的後面 其中問號不能丟sql
若是你不是在jsp頁面裏直接處理form,也是和我同樣採用servlet來處理form的話,那麼在還要增長一個過濾器,這主要是由於採用的是tomcat的web發佈器,若是用resin的話,不會有這樣的問題,這也是我後面花了很長時間的緣由所在。
過慮器 SetCharacterEncodingFilter.java 的代碼:數據庫
package peom;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; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; public class SetCharacterEncodingFilter implements Filter { class Request extends HttpServletRequestWrapper { public Request(HttpServletRequest request) { super(request); } public String toChi(String input) { try { byte[] bytes = input.getBytes(」ISO8859-1″); return new String(bytes, 「utf-8″); } catch (Exception ex) { } return null; } private HttpServletRequest getHttpServletRequest() { return (HttpServletRequest) super.getRequest(); } public String getParameter(String name) { return toChi(getHttpServletRequest().getParameter(name)); } public String[] getParameterValues(String name) { String values[] =getHttpServletRequest().getParameterValues(name); if (values != null) { for (int i = 0; i < values.length; i++) { values[i] = toChi(values[i]); } } return values; } } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { HttpServletRequest httpreq = (HttpServletRequest) request; if (httpreq.getMethod().equals(」POST」)) { request.setCharacterEncoding(」utf-8″); } else { request = new Request(httpreq); } chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { } }
而後在WEB-INF目錄下的web.xml文件,配置下過慮器,tomcat
<filter> <filter-name>SetCharacterEncodingFilter</filter-name> <filter-class>peom.SetCharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>SetCharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
這裏要注意的是:路徑、代碼儘可能放在前面,最好是<web-app 的後面app
完成遇到類型問題處理完,就以爲挺簡單,在問題中時仍是要多點參考參考
原文地址1:http://blog.sina.com.cn/s/blog_6c5ad3d10100ligv.html jsp
原文地址2:http://blog.csdn.net/jdhanhua/article/details/6008756ide