標籤:des style blog http io ar sp java for
最近困擾我很久的一個問題終於解決了,為他我頭疼了好幾天,問題是JSP通過servlet向資料庫傳值,查詢顯示在頁面的時候出現了亂碼,原先我資料庫中有兩行帶有中文的資料,查詢的時候倒是沒有出現亂碼,我debug一下,發現JSP和servlet中所有接受中文字元集的變數都沒有出現亂碼,我去資料庫查看,所有添加的中文字元都是問號,問題發現了,我就百度什麼原因,有人說改變tomcat字元集,通過更改server.xml檔案的字元集來接受中文字元,
方法一:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
我試了一下還是沒能解決問題,
方法二:
如果通過servlet向資料庫發送資料中包含中文,可以再servlet中設定
request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8");
方法三:
在頁面時設定charset的字元集
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
方法四:
在web.xml檔案定義編碼,同時在SetCharacterEncodingFilter類裡定義編碼為utf-8
web.xml:
<filter><filter-name>SetCharacterEncodingFilter</filter-name><filter-class>com.bzu.servlet.SetCharacterEncodingFilter</filter-class></filter><filter-mapping><filter-name>SetCharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
SetCharacterEncodingFilter類:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8");//處理編碼 response.setCharacterEncoding("UTF-8");//處理編碼 chain.doFilter(request, response);//讓過濾器執行下一個請求 } public void destroy() { } public void init(FilterConfig arg0) throws ServletException { }
方法五:在form表單裡定義編碼
accept-charset="utf-8" onsubmit="document.charset='utf-8';"
這些方法都試過了,還是出現了亂碼。無奈,之後在群裡請教大神,有一個大神說,在MySQL資料庫裡運行下面這一句話
show variables like '%char%';
我運行之後的結果是
大神說其中我這兩個需要更改,
然後我就找到安裝目錄下的my.ini檔案吧把下面幾句話給成如下格式:
default-character-set=utf8default-storage-engine=INNODB
之後重啟MySQL,之後果真問題解決了。
附帶群的qq號, 293074111希望群裡能協助一下真正愛學習Java的同學
JSP,servlet和資料庫之間傳值出現亂碼的問題