post請求引數編碼處理
如果瀏覽器沒有在content-type標頭設定字元編碼(eg: content-type: text/html;charset=utf-8)
此時使用request.getcharacterencoding()返回值為null
在這種情況下,容器若使用預設編碼處理是iso-8859-1,而瀏覽器使用utf-8傳送ascii字元的請求引數。
相當於瀏覽器做了string text = urlencoder.encode(「林」,「utf-8」) ;
而servlet取得引數,若容器預設使用iso-8859-1編碼,相當於string text = urldecoder.decode("%e6%9e%97",「iso-8859-1」) ; 而出現亂碼。
可以使用request.setcharacterencoding()指定獲取post引數時使用的編碼。如果瀏覽器以utf-8傳送請求,設定request編碼後,
相當於要求容器做了string text = urldecoder.decode("%e6%9e%97",「utf-8」) ;這樣就能取得正確的「林」中文字元了。
get請求引數編碼處理
request的setcharacterencoding()無效,是因為處理uri的是http伺服器,而非web容器。
在tomcat 7或之前版本附帶http伺服器處理uri使用預設編碼是iso-8859-1,若瀏覽器使用utf-8傳送請求。
servlet中取得請求引數時相當於:string name = urldecoder.decode("%e6%9e%97",「iso-8859-1」) ;
按照string text = new string(name.getbyte(「iso-8859-1」),「utf-8」) ;就能得到「林」了。
加深理解**片段
@slf4j
public
class
parameterencodedecodetest
", decode)
;// 地到iso-8859-1字串之前的utf-8位元組陣列,並使用utf-8轉成字串
string content =
newstring
(decode.
getbytes
("iso-8859-1"),
"utf-8");
log.
info
("content : {}"
, content)
;//張三
}}
異常處理學習筆記
arm處理器的工作模式 使用者模式user 快速中斷模式fiq 處部中斷模式irq 特權模式supervisor 資料訪問中止模式abort 未定義指令中止模式undefined 系統模式system 1一上電,cpu處於 supervisor svc 管理模式 2發生中斷,cpu進入 riq 外部...
批處理學習筆記
前言 批處理,也稱批處理指令碼。windows 環境下做開發,批處理 是乙個非常使用的工具,利用這個工具可以為專案開發提高很大的效率。window提供了很多的命令,通過批處理指令碼,組織這些命令,能夠很快速的做到很多事情,大多數是操作資料夾,操作檔案,啟動其他命令等等。具體例子有 工程打包輸出可執行...
異常處理學習筆記
arm處理器的工作模式 使用者模式 user 快速中斷模式 fiq 處部中斷模式 irq 特權模式supervisor 資料訪問中止模式 abort 未定義指令中止模式 undefined 系統模式 system 1 一上電,cpu處於 supervisor svc 管理模式 2 發生中斷,cpu進...