urlencode和urldecode 與 tomcat處理urlencode請求參數


urlencode實際上是為了在url中支持一些非ascii字符而采用的一種對url進行編碼的方式

比如,當我們進行get請求時,可能遇到請求的值為中文

如下:

如我們請求http://localhost:8080/test4/TestCharset資源時附帶參數名為(haha)值為(我 是中國人)

此時請求url應該為http://localhost:8080/test4/TestCharset?haha=我 是中國人

但是url是不支持非ascii字符的,所以就要進行urlencode,而一般瀏覽器幫我們做這件事情

 

urlencode 具體的方法就是 將遇到的非ascii字符 轉換成 UTF-8編碼(字符串形式) 再將獲得的UTF-8編碼字符串形式的每2個字符(即代表實際編碼的一個字節)前加上%

用上面的例子來說就是

我 是中國人

其中的"我"對應的utf-8編碼是 E68891(十六進制) 所以urlencode后就編程%E6%88%91(字符串)

而空格會被換成%20

所以以上例子整個urlencode后變成了

http://localhost:8080/test4/TestCharset?haha=%E6%88%91%20%E6%98%AF%E4%B8%AD%E5%9B%BD%E4%BA%BA

 

%E6%88%91代表“我”

%20代表" "(空格)

%E6%98%AF代表"是"

......

大家可以從這里查看每個漢字對應的utf-8編碼 進行對比 http://blog.csdn.net/qiaqia609/article/details/8069678

 

urldecode就是urlencode的逆過程,不用再贅述了

 

在tomcat中 獲取值為中文的參數時往往會遇到亂碼問題

 

其實處理方式很簡單 接上面例子 只要如下就行

String test = request.getParameter("haha");
System.out.println(new String(test.getBytes("iso-8859-1"),"utf-8"));

 

其實urlencode和urldecode與Servlet參數沒什么關系,只是我當初錯誤的以為需要自己對參數值進行decode,才寫了這個東西以便讓自己記住。

 urlencode瀏覽器幫我們做,urldecode tomcat會幫我們做,只不過tomcat是老外寫的,所以parameter值是被iso-8859-1編碼的,其中的中文字符不能正確映射,

所以要是想正確映射,必須要自己進行轉碼。

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM