幾種常見的JSP中文亂碼

xss_lala發表於2018-05-14

*WEB容器預設的字串處理編碼是ISO-8859-1
1.JSP頁面顯示時亂碼——輸出時亂碼,
解決方案:為其指定中文字符集,前加<%@pagecontentType=”text/html”:chartset=”gb2312”%>

2.JSP頁面傳遞中文引數時亂碼——get表單提交
解決方案:String email=new String(request.getparmeter(“哈哈”).getByte(“ISO-8859-1”),”gb2312”);%>

3.servlet處理中文引數時亂碼
request.setCharacterEcodeing(“gb2312”);在doPost中加入response.setCotentType(“”text/html;chartset=”gb2312”);

4.post表單亂碼
提交頁面給對應的JSP頁面或者是servlet後,接收方出現表單資料中文值有亂碼,解決方案:在接受post提交的引數之前,使用request.setCharacterEncodeing(“UTF-8”),設定只對post提交有用,get沒有用
原因分析:
1.在文字框輸入中文提交後,返回的是亂碼,由於request.getparamter(“”),得到的引數編碼的方式是有ISO-8859-1
(1).故在之前加上<%request.setCharaterEcnoding(“GBK”)%>,那麼request就用這個編碼接受
(2).在配置檔案Server.xml中,扎到含Port=“8080”的connector區塊,在其後面加上一句URIEncodeing=”GBK”,重啟Tomcate,對所有的網站都有用

2.資料庫中表中欄位有中文資訊,JSP執行死顯示??原因是:資料庫JDBC驅動程式,預設的在java和資料庫之間傳遞,資料庫都是以ISO-8859-1為預設的編碼格式,幾十資料庫原本是用中文編碼(如gbk),jdk也會自動主張的將其轉為ISO-8859
解決方案:在連線資料庫時,在URL中後面加上?useUnicode=true@characterEncoding=”GBK”,例如:mysql://localhost:3306/sqltest?useUnicode=true@characterEncoding=”GBK”

3.通過URL傳遞引數亂碼
,這個轉換字串的拜年嗎或者設定JSP頁面顯示編碼都不行,只能改伺服器servel.xml編碼

7.瀏覽器版本低導致的亂碼,編碼:URLEncoding.encode(name,”utf-8”),傳遞給伺服器”>,解碼:URLDecoder.decode(name,”utf-8”)

8.返回瀏覽器亂碼:由於response.getWriter()方法,返回的printerwriter物件預設使用的是ISO-8859-1,字符集編碼,故用setchraterEncodeing,setconentType的方法

*總結:
1.對於瀏覽器接受伺服器和傳送伺服器編碼都是一樣的,預設是JSP頁面的response.setContentType方法,
2.而伺服器傳送的資料,則是按照response.setChractrEncoding——contentType——pageEncoding,優先順序,
3.資料接收有三種方式:1.URL提交。2.get提交。3.post提交。
亂碼問題的原因,程式的編碼沒有和程式設計人員的編碼進行統一(就像你和一個不懂中文的人(計算機)進行交流,他當然不懂),故要不然手動轉碼,或者宣告編碼讓程式轉

相關文章