URLEncode編碼和URLDecode解碼


1 String  text1 = java.net.URLEncoder.encode("中國" ,"utf-8" );  
2 String  text2 = java.net.URLDecoder.decode(text1,"utf-8"); 

 

(1).URLEncoder
需要注意:這個方法編碼了符號,“\” ,“&”,“=”,和“:”,並把空格(“ ”)轉換成了(+)。它不會嘗試着去規定在一個URL中這些字符怎樣被使用。由此,你不得不分塊編碼你的URL,而不是把整個URL一次傳給這個方法。

  例如,假設你想編碼這個string:

  pg=q&kl=XX&stype=stext&q=+"Java+I/O"&search.x=38&search.y=3

  這段代碼對其進行編碼:  

1 String query = java.net.URLEncoder.encode( "pg=q&kl=XX&stype=stext&q=+"Java+I/O"&search.x=38&search.y=3");
2 
3 System.out.println(query);

  不幸的是,得到的輸出是:

  pg%3Dq%26kl%3DXX%26stype%3Dstext%26q%3D%2B%22Java%2BI%2FO%22%26search.x%3D38%26search.y%3D3

  出現這個問題就是方法URLEncoder.encode( ) 在進行盲目地編碼。它不能區分在URL或者查詢string中被用到的特殊字符(像前面string中的“=”,和“&”)和確實需要被編碼的字符。所以URL需要一次只編碼一塊。

 

  例如正確的拼接方法:
  
 1 private static String _MakeURL(String p_url, Map<String, Object> params) throws UnsupportedEncodingException {
 2            StringBuilder url = new StringBuilder(p_url);
 3             // Strng.indexOf(substring) //搜索String中的substring,默認從0位開始;
 4  
 5             if(url.indexOf( "?")<0)
 6                 url.append( '?');
 7  
 8             for(String name : params.keySet()){
 9                 url.append( '&');
10                 url.append(name);
11                 url.append( '=');
12                  //url.append(String.valueOf(params.get(name)));
13                  //做URLEncoder處理
14                 url.append(URLEncoder. encode(String.valueOf (params.get(name)), "UTF-8"));
15            }
16  
17             return url.toString().replace( "?&", "?");
18      }
 
(2).URLDecoder
  注意:由於這個方法沒有觸及到非轉義字符,所以你可以把整個URL作為參數傳給該方法<如下面的qerry>。不用像之前那樣分塊進行,依然可以得到你想要的正確的解碼結果。例如:
  
1   String input = "http://www.altavista.com/cgi-bin/"+"qerry?pg=q&kl=XX&stype=stext&q=%2B%22Java+I%2FO%22&search.x=38&search.y=3";    
2     try {    
3          String output = java.net.URLDecoder.decode(input, "UTF-8");    
4          System.out.println(output);   
5      }  
 
綜上所述:UrlEncoder一次只能編碼一塊,然后拼接起來,成為一個url ; 而UrlDecoder可以一次性解碼整個鏈接。


免責聲明!

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



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