關於JAVA中URL傳遞中文參數,取值是亂碼的解決辦法

今天遇到一個問題就是在Action當中把一條中文信息綁定在URL的後面,ActionForward到別一個頁面時,用reqeust.getParameter取出是出現亂碼的問題。 java

現解決辦法以下: 網絡

一、對要進行URL傳遞的中文字符進行編碼: app

String message = java.net.URLEncoder.encode("中文字符","utf-8"); 編碼

二、在取URL傳遞中文的頁面對字符進行解碼: url

String msg = request.getParameter("message");
   String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8"); spa

-------------------------------------------------------------------------------------- .net

注 一、這裏得出的str就是先前傳入的"中文字符"。 code

      二、爲何要對取出的字符集形式轉換成UTF-8形式,是由於ISO-8859-1是Java中網絡傳輸使用的標準字符集,request.getParameter("message");獲得的仍是ISO-8859-1字符集,因此要轉換一下。 orm



utf-8


,前幾天看到有網友在問URLDecoder和URLEncoder方面的使用問題,忽然想起,原來我剛遇到這兩個類時,也以爲很神密,由此能夠想一想初學者的心情,因而便有了今天的這篇文章.
   其實,這兩個類的使用並不複雜,URLDecoder和URLEncoder它的做用主要是用於普通字符串和application/x-www- form-rulencodedMIME字符串之間的轉換,通常的人會覺得後一個字符串比較專業,覺得有什麼高深的知識,其實否則.
 

    下面,咱們在在"百度"中搜索"網絡時空",會看到以下所示的圖示

 

 


     從上圖中能夠看出:當咱們搜索的關健字包含中文時,這些關健字就會變成如圖所示的"亂碼",實際上這不是亂碼,這就是所謂的applicaion/x-www-form-urlencodedMIME字符串.
     當URL地址裏包含非西歐字符的字符串時,系統會將這些非西歐轉換成如圖所示的特殊字符串,那麼編碼過程當中可能涉及將普通字符串和這種特殊字符串的相關轉換,這就是須要使用URLDecoder和URLEncoder類

     URLDecoder類包含一個decode(String s,Stringcharcter)靜態方法,它能夠將看上去亂碼的特殊字符串轉換成普通字符串
     URLEncoder類包含一個encode(String s,Stringcharcter)靜態方法,它能夠將普通字符串轉換成application/x-www-form-urlencodedMIME字符串

     以下程序代碼 
importjava.net.*;

public class URLDecoderTest
{
 public static void main(String[] args)
  throws Exception
 {
  //將application/x-www-form-urlencoded字符串
  //轉換成普通字符串
  //其中的字符串直接從上圖所示窗口複製過來
  String keyWord =URLDecoder.decode(
   "%CD%F8%C2%E7%CA%B1%BF%D5","UTF-8");
  System.out.println(keyWord);
  //將普通字符串轉換成
  //application/x-www-form-urlencoded字符串
  String urlStr =URLEncoder.encode(
   "網絡時空" ,"UTF-8");
  System.out.println(urlStr);
 }
}


    上面程序中就是普通中文字符串和application/x-www-form-urlencoded MIME字符串之間的轉換.

     運行上面程序結果圖示以下

 


 

 

總結:
     當URL地址中僅包含普通非中文字符串和application/x-www-form-urlencodedMIME字符串無須轉換,而包含中文字符串的普通字符串則須要轉換,換句話說,也就是說URL地址中有"中文字符串"傳遞時,纔會考慮用到上面提到的兩個類,這樣就能夠將傳遞過來的中文接受後,再還原成原來的中文字符串.如不轉換,則經過URL傳遞過來的中文字符中會變成亂碼,沒法還原了

(本文參考了瘋狂JAVA講義)

相關文章
相關標籤/搜索