JavaWeb亂碼問題淺談
阿新 • • 發佈:2018-12-19
學習筆記
亂碼問題
瀏覽器的編碼格式由當前開啟的頁面決定, 如果頁面中設定了編碼格式那麼瀏覽器就使用這個, 如果沒有,瀏覽器使用系統預設的編碼 伺服器編碼格式和解碼格式預設就是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");