頁面提交資料到servlet中,經常出現中文亂碼問題,而且不同的提交方式處理亂碼的方式不同。下面總結一下post與get提交資料,servlet處理亂碼的解決方案。
1、post方式解決方案
request.setcharacterencoding("utf-8");
response.setcharacterencoding( "utf-8" );
2、get方式解決方案
string string = request。getparamers("");
string = new string(string.getbytes("iso8859-1","utf-8"));
在這裡解析一下new string(string.getbytes("iso8859-1","utf-8"))處理中文亂碼,為什麼是iso8859-1
原因在於tomcat預設全部都是用iso-8859-1編碼,不管你頁面用什麼顯示,tomcat最終還是會替你將所有字元轉做iso-8859-1.那 麼,當在另目標頁面再用gbk翻譯時就會將本來錯的編碼翻譯成gbk的編碼,這時的文字會亂碼.
所以需要先將得到"字元"(不管是什麼)都先用位元組陣列表示,且使用iso-8859-1進行翻譯,得到乙個在iso-8859-1編碼環境下的位元組陣列.例如:ab表示成[64,65].然後再用gbk編碼這個陣列,並翻譯成乙個字串.
我們想一想,這樣我們不是每獲取乙個引數都要new string來轉碼?這樣不僅**量大而且耗記憶體。有沒有好的解決方案呢。。
解決方案就是:修改tomcat的預設編碼
修改tomcat的server.xml
connectiontimeout="20000"
redirectport="8443"
uriencoding="utf-8"
/>
這樣配置tomcat之後,當採用get方式提交時,servlet就不用每次獲取資料都new string來轉碼了。
注意:當你配置tomcat後不能再用string = new string(string.getbytes("iso8859-1","utf-8"));
Servlet 請求中文亂碼高階處理
在我之前的中文處理方式中是根據傳輸的本質對get和post方式進行不同處理,今天學到了乙個高階的處理方式,可以同時處理get和post方式 使用設計模式中的裝飾設計模式 加 過濾器 在這裡簡單說 過濾器 就是在執行servlet 之前先執行的一段 請先明白過濾器是怎麼回事 以下就是使用裝飾設計模式解...
servlet亂碼問題
今天學習servlet,出現了比較煩人的亂碼問題,這裡記錄一下解決方案。在html裡面建立乙個form表單,向servle提交資料,提交中文時就會有亂碼,首先按照程式執行思路走一遍看看到底什麼地方可能會出現問題。首先在瀏覽器輸入位址,tomcat建立servlet,瀏覽器顯示html內容。當使用者提...
Servlet亂碼問題
資料像水流一樣從乙個地方流向另乙個地方。文字流是特殊的二進位製流。既然提到亂碼問題,那就必然是用錯誤的編碼去解釋二進位製流。在傳輸過程中必然都是以二進位製流傳輸的。所以,我們需要考慮的是 下面解決最經典的亂碼問題 servlet讀取資料庫,然後resp.getwriter.print 到前端,出現亂...