1. 程式人生 > >JavaWeb亂碼問題淺談

JavaWeb亂碼問題淺談

學習筆記

亂碼問題

瀏覽器的編碼格式由當前開啟的頁面決定, 如果頁面中設定了編碼格式那麼瀏覽器就使用這個, 如果沒有,瀏覽器使用系統預設的編碼 伺服器編碼格式和解碼格式預設就是ISO-8859-1 瀏覽器的解碼格式由當前開啟的頁面決定

常見的亂碼情況

1.瀏覽器(編碼)-請求—>伺服器(解碼)

2.伺服器(編碼)-響應—>瀏覽器(解碼)

解決思路
統一編碼和解碼就可以解決亂碼問題

1、get請求亂碼

假設瀏覽器是UTF-8,伺服器也要使用UTF-8解碼

解決:修改伺服器的配置檔案,告訴他讀取請求引數時使用UTF-8解碼

在servers專案中server.xml的中的 給connector標籤新增屬性 URIEncoding=“UTF-8”

<Connector connectionTimeout="20000" maxHttpHeaderSize="102400" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

此方法只解決了get請求亂碼(告訴伺服器在解析請求首行時使用UTF-8解析資料)

此方法針對整個工作空間的所有專案,解決了所有的get請求亂碼

2、post請求亂碼

解決:在使用request物件之前設定解碼格式

request.setCharacterEncoding("UTF-8");

此解決方法只針對當前的servlet,每個需要解決post請求亂碼的servlet中都需要設定解碼格式

3、響應亂碼

問題原因:response直接使用ISO-8859-1編碼然後交給瀏覽器

方法1:~~在使用response物件之前設定編碼格式 response.setCharacterEncoding(“UTF-8”);只能讓字串不亂碼,瀏覽器還是不知道如何解析頁面字串 ~~

所以方法1並不能解決問題

方法2:在使用response物件之前設定一個響應頭,告訴瀏覽器如何解析頁面,告訴response物件如何讀取字串

 response.setHeader("Content-Type", "text/html;charset=Utf-8");//設定響應頭
 response.setContentType
("text/html;charset=Utf-8");