天天看點

編碼問題解決方案

首先明确為什麼會出現亂碼:

編碼問題解決方案

1.用戶端發送請求,浏覽器将資料進行打包(預設utf-8),然後發送至伺服器

2.伺服器對接收的資料進行解碼(預設為iso-8859-1),然後将資料進行處理,最後打包傳回浏覽器

3.浏覽器将傳回的資料包進行解碼顯示,完成一次連接配接互動。

在這一過程中應該確定所有步驟的編碼或解碼方式保持一緻,否則就會出現亂碼問題。

一、表單的中文問題

浏覽器對表單中的資料(非ascii字元)會進行編碼。所使用的編碼是打開該表單所在的頁面時所使用的編碼。

1、 靜态頁面(html)編碼問題

使用

<meta http-equiv="content-type" content="text/html;charset=utf-8">

指定打開頁面時的編碼。

2、 Jsp頁面編碼問題

在JSP頁面上輸入中文,請求頁面後不出現亂碼。應該保證:

contentType="text/heml;charset=UTF-8"pageEncoding="UTF-8" charset和pageEncoding

的編碼一緻,且都支援中文,通常建議取值UTF-8

還需要保證浏覽器的顯示的字元編碼也和請求的JSP頁面的編碼一緻

3、servlet中編碼問題

擷取中文參數值:預設參數在傳輸過程中使用的編碼為ISO-8859-1

①對于POST請求:在擷取請求資訊之前(調用request.getParameter() 或者是 request.getRead())使用request.setCharacterEncoding(“utf-8”)即可

②對于GET請求:前面的方式對于GET無效,可以通過修改Tomcat的server.xml檔案的方式,修改方式下文提到

//指定request對象解碼時所使用的編碼格式。
a. request.setCharacterEncoding("utf-8");
b.如果要輸出資料到浏覽器,還要使用
response.setContentType("text/html;charset=utf-8");
           

4、 如果要儲存資料到資料庫

a. 建立資料庫時,使用:

create database cc default 
character set utf8;
           

b. jdbc驅動程式,指定資料庫編碼,即告訴驅動程式,目前資料庫儲存資料所使用的

編碼是什麼。

jdbc:mysql://localhost:3306/cc?
useUnicode=true&characterEncoding=utf8
           

二、連結位址包含中文 (GET方式)

浏覽器會對連結位址中的中文(包含其它ascii字元以外的字元,比如日文,部分的拉丁字元)進行編碼,預設采用采用utf-8編碼。

伺服器端預設情況下采用iso-8859-1解碼。此時,可以通過設定配置檔案的方式,告訴伺服器采用指定的編碼來解碼。

tomcat_home/conf/server.xml 添加 URIEncoding=”utf-8”,作用是:伺服器

對于get請求,采用“utf-8”來解碼。

三、請求參數當中包含中文

請求參數當中包含中文,浏覽器也會編碼,所使用編碼與打開該頁面時的編碼一緻。  

方案一:

  保證頁面打開時的編碼與URIEncoding的設定一緻。

方案二:

  如果頁面打開時的編碼與URIEncoding的設定不一緻,可以

<a href="xxx?name=<%=URLEncoder.encode("中文","編碼")%>"></a>
           

繼續閱讀