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編碼的,其中的中文字符不能正確映射,
所以要是想正確映射,必須要自己進行轉碼。