JSP頁面亂碼分析及解決

來源:互聯網
上載者:User

JSP頁面亂碼分析及解決

 

  一。 解決響應中的亂碼
  所謂響應中的亂碼,就是顯示頁面上的亂碼,因為頁面資料是從伺服器一端放入響應(response)中,然後發送給瀏覽器,如果響應中的資料無法被正常解析,就會出現亂碼問題。
  為什麼英文就沒有問題呢?因為在iso-8859-1,gb2312, utf-8以及任意一種編碼格式下,英文編碼格式都是一樣的,每個字元佔8位,而中文就麻煩了,在gb2312下一個中文佔16位,兩位元組,而在utf-8下一個中文要佔24位,三位元組。瀏覽器在不知道確定編碼方式的情況下,就會把這些字元從中間截斷,再顯示的時候就亂掉了。所以,想要解決亂碼問題,就是要告訴瀏覽器我們到底使用了什麼樣的編碼方式。

  為了獲得正常顯示的中文,需要注意以下幾步:
  因為伺服器要先從本地讀取jsp檔案,然後經過處理後寫入響應,所以我們首先要知道的就是jsp檔案的編碼格式。從問題的源頭著手解決。
  在咱們用的windowxp下,檔案預設的編碼格式是gb2312。我們要在http的響應(response)中添加編碼資訊,使用如下方式:

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

  這段要放在jsp頁面的第一行,用來指定響應的類型和編碼格式,contentType為text/html就是html內容,charset表示編碼為gb2312。這樣瀏覽器就可以從響應中獲得編碼格式了。這種<%@ %>的形式叫做jsp指令(directive),現在接觸到的是page指令,還有include和taglib指令,我們會在後面陸續講到。

  還需要在html中指定編碼格式。
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
        <title>title</title>
    </head>
  meta部分用來指定當前html的編碼格式,注意這一段要放在head標籤中,並且放到head標籤的最前面,如果不是最前面ie下可能會出現問題,尤其是在title中有中文的情況下。

  二。POST亂碼

  先把form裡加上method="POST",讓form提交的時候使用POST方式。
  發送請求的時候,使用的編碼是iso-8859-1,意味著只有英文是有效字元,這個限制是因為當初指定http標準的成員都來自英語國家,所以如果使用預設的方式從請求擷取資料,中文一定會全部變成亂碼。
  解決方案是要在jsp最前面加上一條java語句,佈建要求的字元編碼。
      <%
          request.setCharacterEncoding("gb2312");
      %>

  三。GET亂碼

  直接點擊超連結,form的預設提交方式都是GET。
  POST方式下的解決方式還算簡單,因為POST方式下提交的資料都是以二進位的方式附加在http請求的body部分發送,只需要在後台指定編碼格式就足矣解決。
  GET方式下會將參數直接附加到url後面,這部分參數無法使用request.setCharacterEncoding()處理,結果就是get形式的所有中文都變成了亂碼。這時再也沒有簡便方法了,只能對這些中文一個一個進行轉換,使用new String(bytes, "gb2312")進行轉碼。
  如我們所見,先從request中獲得參數,接著把字串按照iso-8859-1編碼打散成byte數組,然後用gb2312編碼組合成新字串,最後列印出來就是正常的中文了。這樣做的缺點,是從請求中取得的所有中文都需要轉碼,非常煩瑣。所以大家千萬不要像這樣<a href="test.jsp?username=測試">測試</a>,把中文參數寫到超連結中,form盡量使用method="POST",這樣只需要設定request.setCharacterEncoding()就可以應付中文亂碼問題。

  本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/CenturyMagus/archive/2008/07/23/2697479.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.