MySQL雖說好用,但很容易出現中文亂碼的問題,以下列出Java Web開發中常見的幾種中文亂碼問題:
1、JSP頁面顯示問題
2、存入MySQL資料中文亂碼
3、讀取MySQL資料中文亂碼
字元集:字元集定義了它包含哪些字元以及每個字元對應什麼數字。
字元編碼:在電腦中儲存數字,顯示時轉換為對應的字元,編碼方式是指表示字元的數字以什麼方式儲存。
介個也太唧唧歪歪了,不搞這個研究的可以完全忽視。只要知道UTF-8是為統一世界上所有字元編碼的產物就ok了。
解決方案才是王道:
(如果頁面使用到CKEditor外掛程式的話,其實中文亂碼和這個關係不大)
1、JSP顯示中文亂碼的問題,一般都是沒有設定頁面編碼,注意添加以下這樣一段代碼
<%@ page pageEncoding=”UTF-8”%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
"pageEncoding"指定了當前jsp檔案儲存體使用的編碼方式,“contentType”用來指定回應標頭訊息中的"Content-Type"
當服務端的回應標頭訊息中沒有指定charset時,用戶端會依據上面代碼中的charset指定的編碼方式解碼頁面
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
並且JSP都以UTF-8的編碼方式儲存,把所有可能出現的問題通通抹殺。www.bkjia.com 如果你使用Myeclipse,可以設定Myeclipse的預設參數,使Myeclipse建立JSP檔案時,可以自動是用UTF-8的編碼方式。方法:Windows-Preference-Myeclipse-File and Editor-JSP-Encoding,選擇ISO 10646/Unicode(UTF-8)
2、儲存資料,MySQL表的編碼設定,最好指定相應的編碼格式。字元集選擇utf8,校對utf8_unicode_ci。
安裝MySQL時,會提示使用什麼樣的預設編碼,當然也可以自己設定
修改 my.ini(MySQ安裝目錄下的檔案)
# CLIENT SECTION
[client]
port=3306
[mysql]
default-character-set=utf8
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=utf8
修改完畢後,務必記得重啟MySQL!!!修改這個檔案,是我設定了CharacterEncoding、指定了頁面編碼、並且使用了過濾器依舊無法解決問題,幾近崩潰的時候,最後的救命稻草!
3、讀取資料時,在Servlet中添加request.setCharacterEncoding("UTF-8");可以很好地解決從JSP頁面接受中文參數亂碼
4、使用過濾器,如果在MySQL預設編碼格式為UTF-8的情況下,只使用過濾器,便可以解決一切問題,無論你有沒有設定那些繁雜的編碼。
在包中建一個class:CharacterEncodingFilter
package com.rady.blog;
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 CharacterEncodingFilter implements Filter {
private FilterConfig config;
private String encoding = "UTF-8";
public void destroy() {
config = null;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
this.config = config;
String s = config.getInitParameter("encoding");
if (s != null) {
encoding = s;
}
}
}
在web.xml中添加
<filter-name>EncodingFilter</filter-name>
<filter-class>com.rady.blog.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
最後把Tomcat也幹掉,防患於未然,滴水不漏,中文從此不再!
修改Tomcat安裝目錄/conf/server.xml檔案
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>