java編碼全解析
http中傳遞的訊息分為請求行 請求頭 實體內容
請求行 就是網址
請求頭中有很多欄位 比如cookies就是其中的一個欄位
實體內容 常見的post請求中的實體內容
其中實體內容是可以通過HttpServletRequest request, HttpServletResponse response設定編碼的
解碼定義 將字元轉換為位元組(二進位制數)
編碼定義 將位元組(二進位制數)轉換為字元
其中如果
request.setCharacterEncoding("utf-8") 設定伺服器接收客戶端的位元組,然後將位元組轉換為字元的編碼格式
response.setContentType("text/html;charset=utf-8");設定伺服器發給客戶端的位元組和客戶端解碼的碼錶
伺服器將字元轉換為位元組傳送給客戶端 然後客戶端接收到位元組,通過解碼將位元組轉換字元
請求行中
1.常見的 get請求的資訊是在請求行中
伺服器拿到從客戶端發過來的資料
因為 request不能設定編碼格式,所以會採用預設的編碼"iso-8859-1"進行編碼
所以需要將得到的字元通過"iso-8859-1"碼錶轉換為位元組,然後再通過對應的碼錶將此位元組轉換為字元
value是get請求中得到的欄位的值
new String(value.getBytes("iso-8859-1"),"uft-8");
2.整個網址連結上存在特殊字元(中文等)==對網址連結處理辦法
encodeURI和decodeURI是成對來使用的,因為瀏覽器的位址列有中文或其他英文字元的話,可以會出現不可預期的錯誤,所以可以encodeURI把非英文字元轉化為英文編碼,再用decodeURI把字元還原回來 Javascript:encodeURI(URIString)與decodeURI(URIString) 必選的 URIString 引數代表一個已編碼的 URI。 說明 encodeURI 方法返回一個編碼的 URI。如果您將編碼結果傳遞給 decodeURI,那麼將返回初始的字串。encodeURI 方法不會對下列字元進行編碼:":"、"/"、";" 和 "?"。請使用 encodeURIComponent 方法對這些字元進行編碼。 注:decodeURI()方法相當於java中的java.net.URLDecoder.decode(URIString, "UTF-8") encodeURI() 方法java.net.URLEncoder。encode(URIString, "UTF-8"))
請求頭中 常見的 cookies物件
伺服器先用iso-8859-1碼錶編碼cookies欄位傳送給客戶端,然後客戶端通過iso-8859-1去編碼此欄位
如果cookies物件中的引數存在iso-8859-1"碼錶沒有字元,那麼直接會報錯(iso-8859-1不支援中文等特殊字元)
所以通過將此引數進行轉換
String curDate = URLEncoder.encode(date, "utf-8");===解碼的時候設定碼錶
String getDate =URLDecoder.decode(c.getValue(),"utf-8");===編碼的時候設定碼錶