1. 程式人生 > >java編碼全解析

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");===編碼的時候設定碼錶