http傳送資料的解碼與編碼

2022-07-13 16:21:09 字數 1480 閱讀 4286

1.一般情況下,url中目錄中的中文按照utf-8進行編碼,「中」的utf-8編碼為「%e4%b8%ad」。

2.get方法的引數按照計算機的系統語言進行編碼,中文按照gbk,「中」的gbk編碼為「%d6%d0」;日文環境按照「shift-jis」,「中」的編碼為「%92%86」

3.post方式的引數,會放到http正文當中,按照utf-8形式編碼,「中」的utf-8編碼為「%e4%b8%ad」。

針對乙個在後台的解碼:

1.加入在後台中的匹配路徑中含有中文,那麼要將路徑中的中文「中」按照正確的格式解碼,解決方案可也是:  

在tomcat的server.xml的connector節點下加入uriencoding="utf-8",這樣就能匹配到中文的路徑。  

一般在路徑中不會包含中文,另外在tomcat中加入uriencoding="utf-8",會影響所有的工程,所以這種方法一般不會使用(本人基於興趣看了下)。

2.對get引數進行正確的解碼。  

在tomcat中沒有加入uriencoding="utf-8",tomcat預設按照iso-8859-1解碼,所以要想得到正確的中文引數,按如下方式,先解碼再按照正確方式編碼:  

system.out.println(new string(request.getparameter("username").getbytes("iso-8859-1"),"引數編碼"));  

引數編碼是自己計算機系統環境的編碼。    

問題出現了:如果加入uriencoding="utf-8",理論上引數會按照utf-8進行解碼,但是還會出現亂碼:  

system.out.println(new string(request.getparameter("username").getbytes("utf-8"),"引數編碼"));  

現在還沒解決掉,望大家幫忙。

3.post方式的解碼   uriencoding="utf-8"的設定對post沒有影響,所以post引數在後台還是按照iso-8859-1來進行解碼的:  

string s = new string(t.getparameter("username").getbytes("iso-8859-1"),"utf-8");  

這樣就能輸出中文。    

如果不想每次都這麼轉換,在spring中可以使用filter來進行。filter對post起作用,對get不起作用。

encodingfilter  

org.springframework.web.filter.characterencodingfilter

encoding  

utf-8  

encodingfilter

rest

system.out.println(t.getparameter("username"));

也可以自己寫過濾器,但是不推薦,因為自己寫和使用現有的是一樣的,沒那個必要。

暫時先寫這麼多,把自己的學習記錄下,上面還有沒解決的問題,望大家指導下,感激不盡!

C語言 傳送編碼與解碼函式

小知識 資料在計算機中都是以二進位制儲存 1 1 i 表示1右移i位 i 1 表示i左移1位 i 1 表示i右移1位 以下編碼解碼函式可以在微控制器上實現 傳送編碼函式 一幀資料 前導碼加8位資料碼 前導碼乙個碼字 高電平250us,低電平250us 資料碼乙個碼字 1 高電平80us,低電平40u...

is 編碼與解碼

is 和 主要是數字和字串的比較 1 區別 比較的是兩邊的值 is比較的是兩邊值的id id獲取的方法 id 2 小資料池 5 256 3 字串中特殊字元有id不同 4 字串中單個字元 20以內,記憶體位址是一樣的 21以上記憶體位址不一致 編碼與解碼 1 encode a 把明文編譯成a格式 de...

PPP資料幀的編碼與解碼

一 摘要 ppp協議是在atm網路裡常用的鏈路協議,基於ppp協議的pppoa,pppoe在xdsl數據機中不可或缺。本文簡單描述ppp協議的幀封裝格式,並給出了乙個簡單的ppp編碼與解碼演算法,以期望能對需要者有所幫助。二 ppp協議簡介 ppp資料幀的格式看上去很像iso的hdlc 高層資料鏈路...