struts2中各種中文亂碼問題

瀏覽器提交數據的方式:表單提交和Ajax提交。

 瀏覽器和服務器交互過程:

           瀏覽器(ie firefox)【get/post】------------>Servlet服務器------------------------------->瀏覽器顯示
                                 編碼                   解碼成unicode,執行請求然後將顯示的內容編碼          解碼

        瀏覽器提交數據到服務器時都需要對數據進行編碼,經過編碼的數據到達服務器後,服務器需要對數據進行正確的解碼才能獲得正確數據,服務器執行完處理後需要返回頁面數據給瀏覽器,那麼返回的數據也是有編碼格式的,比如返回的數據是utf8或gb2312格式的,那麼服務器返回給瀏覽器時就需要告訴瀏覽器用那種編碼格式對數據進行解碼才能正確在瀏覽器裏顯示。

         

1. 表單提交

瀏覽器表單提交的get和post方式的數據均是以瀏覽器編碼(即response.setContentType("text/html;charset=utf-8")或jsp文件頭中的contentType="text/html;charset=utf-8")進行編碼後發送的。

2.AJAX提交

2.1 AJAX提交數據的post方式一定是UTF-8的編碼方式,不會使用瀏覽器編碼進行編碼。

    request.setCharacterEncoding("utf-8");

2.2 AJAX提交數據的get方式則是使用gb2312編碼方式。

AJAX的get方式獲取中文的解決方案:

(1)項目使用的是gb2312編碼

如果在Tomcat服務器中設置了URIEncoding="gb2312",則在後臺只需要用request.getParameter("name")就可以正確獲得中文參數。

如果沒有在Tomcat服務器設置URIEncoding="gb2312",要想在後臺正確獲得參數中的中文,需要做如下轉換

String name = new String(request.getParameter("name").getBytes("iso-8859-1"),"gb2312"));

(2)項目使用的是UTF-8編碼

如果在Tomcat服務器中設置了URIEncoding="UTF-8",則在前臺提交時需要用JavaScript方法encodeURIComponent對中文參數進行UTF的編碼後提交,後臺只獲取參數只需用request.getParameter("name")

如果沒有在Tomcat服務器中設置了URIEncoding="UTF-8",前臺也沒有用encodeURIComponent方法,後臺獲取需要做如下轉換

String name = new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8"));

 

1、表單提交到action中文亂碼

         原因:struts2中默認提交的字符編碼是UTF-8,因此當JSP頁面編碼方式不是UTF-8時,提交到後臺的中文出現亂碼。

         解決辦法:1)將JSP頁面的編碼方式設置爲UTF-8。2)在struts.xml文件中<struts>標籤內部添加<constant name="struts.i18n.encoding" value="gbk" />,此時value的值與JSP頁面的編碼方式一致,這句話的意思是將struts2提交的字符編碼方式設置成GBK。

2、URL帶參數提交到Action中文亂碼

         原因:瀏覽器默認使用ISO8859_1編碼方式傳遞中文,

         解決辦法:1)String a=new String((request.getParameter("a")).getBytes("ISO8859_1"),"UTF-8");   2)在tomcat服務器的server.xml的Connector設置URIEncoding="UTF-8",確保解碼格式與編碼格式統一;

3、頁面顯示中文亂碼

        原因:JSP默認的編碼格式爲“ISO_8859_1”,當JSP中出現要處理的中文時,中文會變成亂碼。

        解決辦法:將JSP頁面的編碼格式改成“UTF-8”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章