JSP中文亂碼問題一

來源:互聯網
上載者:User

      接觸JSP難免會遇到Java的中文亂碼問題,對於不同的情況,有不同的解決方案。以下是我所遇到的亂碼問題以及查閱的一些解決方案。


一、頁面編碼不一致導致的亂碼問題

     這個亂碼問題是最簡單的亂碼問題,一般新手會出現。看以下JSP頁面代碼:

<%@ page language="java" pageEncoding="UTF-8"%><%@ page contentType="text/html;charset=iso8859-1"%><html>  <head>  <title>中文問題</title>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  </head>  </head>  <body>          中文欄位  </body></html>

中文亂碼原因:

上述頁面裡三個地方出現了編碼

1.pageEncoding="UTF-8":pageEncoding屬性的作用是指定JSP頁面的編碼格式(或者說是以什麼編碼格式儲存)Java IDE(如MyEcljpse)會根據這個編碼格式儲存檔案。並編譯jsp檔案,包括裡面的漢字。

2.contentType="text/html;charset=iso8859-1":contentType屬性的作用是指定伺服器出請求完成後回應給瀏覽器的內容類型。因為pageEncoding指定了儲存格式為UTF-8,但是contentType卻指定JSP檔案被解碼為iso8859-1,這樣如有中文肯定出亂碼,所以兩者必須一致。

3.content="text/html; charset=UTF-8":content控制瀏覽器的解碼方式。如果前面的解碼都一致並且無誤的話,這個編碼格式不會產生影響。但有的網頁出現亂碼,就是因為瀏覽器不能確定使用哪種編碼格式。因為頁面有時候會嵌入頁面,導致瀏覽器混淆了編碼格式。出現了亂碼。


中文亂碼解決方案:

步驟一、統一JSP頁面中的pageEncoding、contentType和content的編碼格式。修正後的代碼如下:

<%@ page language="java" pageEncoding="UTF-8"%><%@ page contentType="text/html;charset=UTF-8"%><html>  <head>  <title>中文問題</title>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  </head>  </head>  <body>          中文欄位  </body></html>

步驟二、設定IDE(筆者用的是MyEclipse)的JSP頁面的編碼格式,將其統一設定為UTF-8。具體的設定方法可參見一下連結的文章:
(Eclipse)http://blog.csdn.net/cxwen78/article/details/6400798

(MyEclipse)http://cavonchen.iteye.com/blog/681810


二、表單使用Post方式提交後接收到的亂碼問題

<%@ page language="java" import="java.util.*" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><html>  <head>       <title>request擷取表單資料樣本</title>  </head>   <body>  <font size="2">  下面是表單內容:  <form action="Form.jsp" method="post">       使用者名稱:<input type="text" name="userName" size="10"/>       密  碼:<input type="password" name="password" size="10"/>      <input type="submit" value="提交">   </form>     下面是表單提交以後用request取到的表單資料:<br>   <%      out.println("表單輸入userName的值:"+request.getParameter("userName")+"<br>");      out.println("表單輸入password的值:"+request.getParameter("password")+"<br>");      out.println("HTML傳遞資料所用方法:"+request.getMethod()+"<br>");        out.println("請求使用的協議:"+request.getProtocol()+"<br>");      %>   </font>  </body></html>

運行結果:使用者名稱輸入“中文”,提交後,下面的“userName的值”後面就出現了亂碼。


      

 這個問題也是一個常見的問題。這個亂碼也是tomcat的內部編碼格式iso8859-1在搗亂,也就是說post提交時,如果沒有設定提交的編碼格式,則會以iso8859-1方式進行提交,接受的jsp卻以utf-8的方式接受。導致亂碼。既然這樣的原因,下面有幾種解決方式,並比較。


1、接受參數時進行編碼轉換:String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ; 這樣的話,每一個參數都必須這樣進行轉碼。很麻煩。但確實可以拿到漢字。


2、接受參數時進行編碼轉換:在請求頁面上開始處,執行請求的編碼代碼, request.setCharacterEncoding("UTF-8"),把提交內容的字元集設為UTF-8。這樣的話,接受此參數的頁面就不必在轉碼了。直接使用String
str = request.getParameter("something");即可得到漢字參數。但每頁都需要執行這句話。這個方法也就對post提交的有效果,對於get提交和上傳檔案時的enctype="multipart/form-data"是無效的。

採取這種方式解決修改後的代碼如下:

<%@ page language="java" import="java.util.*" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><html>  <head>       <title>request擷取表單資料樣本</title>  </head>   <body>  <font size="2">  下面是表單內容:  <form action="Form.jsp" method="post">       使用者名稱:<input type="text" name="userName" size="10"/>       密  碼:<input type="password" name="password" size="10"/>      <input type="submit" value="提交">   </form>     下面是表單提交以後用request取到的表單資料:<br>   <%     request.setCharacterEncoding("UTF-8");      out.println("表單輸入userName的值:"+request.getParameter("userName")+"<br>");      out.println("表單輸入password的值:"+request.getParameter("password")+"<br>");      out.println("HTML傳遞資料所用方法:"+request.getMethod()+"<br>");        out.println("請求使用的協議:"+request.getProtocol()+"<br>");      %>   </font>  </body></html>

對比可知,添加了request.setCharacterEncoding("UTF-8"),運行結果如下:正確顯示“中文”


3、接受參數時進行編碼轉換:為了避免每頁都要寫request.setCharacterEncoding("UTF-8"),建議使用過濾器對所有jsp進行編碼處理。這個網上有很多例子。請大家自己Baidu和Google查閱。


關於JSP中文亂碼的問題還有一些,比如表單get提交方式的亂碼、指令碼代碼關於url請求,接受到的參數亂碼、上傳檔案時的亂碼、資料庫亂碼等等,未完待續...



相關文章

聯繫我們

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