關於java亂碼的一些總結

來源:互聯網
上載者:User

Java亂碼是因為Java和JSP源檔案的儲存方式是基於位元組流的,如果Java和JSP編譯成class檔案過程中,使用的編碼方式與源檔案的編碼不一致,就會出現亂碼。在這裡,總結一下java亂碼的一些常見情況

 

1.Javascript傳參亂碼:

在瀏覽器端對要傳遞的中文參數進行編碼處理.代碼如下: 
xmlhttp.open("POST",url,true); //請求參數初始化 
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //因為請求方式為POST,所以這裡要佈建要求頭.(如果請求方式為GET,此句代碼可以省略) 
xmlhttp.send("name="+encodeURI(encodeURI("星期日"))); //向伺服器端發送參數 
在伺服器端代碼:

頁面jsp保證是utf-8編碼

<%@ page contentType="text/html; charset=GBK"%>

接受中文參數
PrintWriter out = response.getWriter(); //得到response的輸出資料流對象 
String name1 = request.getParameter("name"); //得到KEY為"name"的請求參數 
String name = URLDecoder.decode(name1,"utf-8"); //對得到的參數進行解碼 
out.print(name); //向瀏覽器端發送資料

 

2.JSP與頁面參數之間的亂碼
       JSP擷取頁面參數時一般採用系統預設的編碼方式,如果頁面參數的編碼類別型和系統預設的編碼類別型不一致,很可能就會出現亂碼。解決這類亂碼問題的基本方法是在頁面擷取參數之前,強制指定request擷取參數的編碼方式:request.setCharacterEncoding("UTF-8") 。
    如果在JSP將變數輸出到頁面時出現了亂碼,可以通過設定response.setContentType("text/html;charset=UTF-8")。

JSP頁面亂碼通常只要在頁面開始地方用上面代碼指定字元集編碼即可。如果還不行,那麼請用下面這句話來轉換 str=new String(str.getBytes("ISO-8859-1"),"頁面編碼方式"); 

 

3.熱連結傳參亂碼

在傳參的jsp對中文進行編碼:href="new.jsp?name=java.net.URLEncoder.encode("連結")";

在接受的jsp對中文進行轉碼:String str = URLDecoder.decode(request.getParameter("name "), "utf-8");

 

4.Java與資料庫之間的亂碼 
  大部分資料庫都支援以unicode編碼方式,所以解決Java與資料庫之間的亂碼問題比較明智的方式是直接使用unicode編碼與資料庫互動。很多資料庫驅動自動支援unicode,如Microsoft的SQLServer驅動。其他大部分資料庫驅動,可以在驅動的url參數中指定,如mysql驅動:jdbc:mysql://localhost/MYAPPS?useUnicode=true&characterEncoding=GBK。

 

5.Java與檔案/流之間的亂碼
  Java讀寫檔案最常用的類是FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream和FileOutputStream是基於位元組流的,常用於讀寫二進位檔案。讀寫字元檔案建議使用基於字元的FileReader和FileWriter,省去了位元組與字元之間的轉換。但這兩個類的建構函式預設使用系統的編碼方式,如果檔案內容與系統編碼方式不一致,可能會出現亂碼。在這種情況下,建議使用FileReader和FileWriter的父類:InputStreamReader/OutputStreamWriter,它們也是基於字元的,但在建構函式中可以指定編碼類別型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.