解決Java Web開發中Jsp儲存讀取MySQL資料中文亂碼的問題

來源:互聯網
上載者:User

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"/>

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.