場景:前端用js構造了乙個get請求,攜帶了乙個中文的引數,通過spring mvc傳到後台以後解析中文是亂碼。
1. 傳送請求,從瀏覽器中捕獲到http的請求內容如下:
4 status code:201 created
1 //將utf-8格式的中文轉換成url編碼
2 encodestr = urlencoder.encode(fname, "utf-8");
3 //將url編碼的字串轉換成utf-8格式的中文
4 decodefname = urldecoder.decode(encodestr, "utf-8");
測試結果,沒有達到預期,再仔細看看,笑了,上面不是做了一次a->b->a的無效轉碼嗎?!
3.亂碼是怎麼回事呢?
我的頁面設定的utf-8格式,我的spring mvc框架的編碼filter也配置了utf-8,現在的亂碼是怎麼回事呢?
4. 原因找到了:
spring mvc 是基於servlet,在http請求到達servlet解析之前,get過來的url已經被tomcat先做了一次urldecode。
tomcat對get方式預設的url解碼結果是iso-8859-1而不是utf-8!
5. 解決辦法:
decodefname = new string(fname.getbytes("iso-8859-1"),"utf-8");
由於上述原因,在構造http響應訊息時,需要把中文字元再轉成iso-8859-1。
6.還有一種辦法,就是配置tomcat:
在tomcat的conf目錄下的server.xml中配置connector的urieconding=「utf-8"屬性即可,沒有這個引數可以手動加上。
或者是其他伺服器的connector也可以
還有配置專案的***
vanclshare
org.springframework.web.servlet.dispatcherservlet
contextconfiglocation
classpath:vanclshare-servlet.xml
1 *.html
/index
index
關於HTTP GET請求的url中文引數編碼
場景 前端用js構造了乙個get請求,攜帶了乙個中文的引數,通過spring mvc傳到後台以後解析中文是亂碼。1.傳送請求,從瀏覽器中捕獲到http的請求內容如下 4 status code 201 created1 將utf 8格式的中文轉換成url編碼 2 encodestr urlencod...
HTTP GET請求URL中IP被異常替換的問題
現在有乙個web遊戲登入介面,大致就是傳遞使用者名稱 伺服器id 使用者ip 登入時間完成遊戲登入資訊生成的功能。鏈結大約是這樣的 為了防止偽造請求,這些引數都需要進行簽名。簽名方式大致是把這些引數拼接起來再加乙個key進行md5運算。只要任何乙個引數被修改,md5值都會發生改變,簽名檢查就無法通過...
各瀏覽器HTTP Get請求URL的最大長度
各瀏覽器http get請求url最大長度並不相同,幾類常用瀏覽器最大長度及超過最大長度後提交情況如下 ie6.0 url最大長度2083個字元,超過最大長度後無法提交。ie7.0 url最大長度2083個字元,超過最大長度後仍然能提交,但是只能傳過去2083個字元。firefox 3.0.3 ur...