1. 程式人生 > >資料庫及頁面亂碼問題

資料庫及頁面亂碼問題

目錄

MySQL亂碼問題

1、前臺頁面

2、控制器/過濾器(filter)

3、資料庫及表格編碼

4、字元流編碼

5、Tomcat編碼


MySQL亂碼問題

1、前臺頁面

JSP、HTML頁面頭部設定字元編碼為UTF-8。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8
">

2、控制器/過濾器(filter)

(1)servlet設定頁面請求和迴應的編碼:

request.setCharacterEncoding("utf-8");  [一般用於post請求方式]


response.setCharacterEncoding("utf-8"); 


(2)如果是struts2

struts.xml中新增如下語句:

 

<constant name="struts.i18n.encoding" value="utf-8" />


(3)如果使用了spring框架

web.xml配置中,設定初始化引數

<filter>
  <filter-name>yk</filter-name>
  <filter-class>com.servletlx.filter.YkFilter</filter-class>


  <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
  </init-param>



  </filter>

 


 

public class YkFilter implements Filter{

             //其他程式碼未全部寫出,這裡只寫出和編碼相關的語句

private String encoding = null;//定義表示編碼方式的變數

@Override
             public void init(FilterConfig arg0) throws ServletException {
             // 獲取初始化引數,只執行一次
            encoding = arg0.getInitParameter("encoding"); //獲取引數的值,該值表示編碼的方式
             }

 

           @Override
          public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {
                   //三個引數:請求,迴應,過濾鏈
        HttpServletRequest request = (HttpServletRequest)arg0;
        HttpServletResponse response = (HttpServletResponse)arg1;
        request.setCharacterEncoding(encoding); //引數代表編碼的方式
        response.setCharacterEncoding(encoding);

        .............

        }

 

}

 

3、資料庫及表格編碼

第一:保證資料庫的編碼方式為UTF-8;

 

第二:保證資料表的編碼方式為UTF-8;

 

第三:使用jdbc連線資料庫時,在URL中新增useUnicode引數(useUnicode=true表示使用Unicode字符集)和characterEncoding引數(characterEncoding=utf8,當useUnicode設定為true時,指定字元編碼)

 

如:jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=utf8"

 

資料庫及資料表的編碼格式檢視及修改請檢視:MySQL相關命令

 

4、字元流編碼

String string = request.getParametes('sname');

 

  //把得到的值轉換為原始編碼,再轉換為UTF-8編碼

 

  string=new String(string.getBytes("iso8859-1"),"UTF-8");  [一般用於get請求]

5、Tomcat編碼

想通過get請求帶中文資料也不會出現亂碼,還需要編輯Tomcat的編碼

 

server.xml檔案中,在埠號8080後新增編碼格式  URIEncoding=”utf-8”

 

    <Connector executor="tomcatThreadPool"

               port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443"  UTFEncoding=”utf-8” />