為什么java的web開發中URLEncoder.encode方法要為什么要調用兩次


一: 我們先看2個編碼的情況


   
   
  
  
          
  1. String name=java.net.URLEncoder.encode( "測試", "UTF-8");
  2. System.out.println(name);
  3. name=java.net.URLEncoder.encode(name, "UTF-8");
  4. System.out.println(name);
  5. name=java.net.URLDecoder.decode(name, "UTF-8");
  6. System.out.println(name);
  7. System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));

輸出結果是

            %E6%B5%8B%E8%AF%95
            %25E6%25B5%258B%25E8%25AF%2595
            %E6%B5%8B%E8%AF%95
            測試

二; 我們來看編碼一次,提交給服務器的結果

我們吧“測試”編碼一次的字符串%E6%B5%8B%E8%AF%95  ,提交,服務器端用request.getParameter("name")的到參數,然后我們解碼

System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));

我們發現得到的結果 ???è?  顯示亂碼。

因為在request.getParameter("name")之前會自動做一次解碼的工作,而且是默認的ISO-8859-1,相當於調用了一次java.net.URLDecoder.decode(name, "ISO-8859-1")

所以我們再用URLDecoder.decode(name, "UTF-8")就是亂碼了。


三: 我們在看編碼2次,提交給服務器的結果

編碼2次的字符串是%25E6%25B5%258B%25E8%25AF%2595 ,服務器端用request.getParameter("name")的到參數,自動按ISO-8859-1解碼得到的串是%E6%B5%8B%E8%AF%95  ,也就是編碼一次得到的字符串。


然后,我們在System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));解碼輸出,得到的結果就是 “測試” 2個漢字。





免責聲明!

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



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