在編寫一個表單文件時,因爲我考慮到表單中沒有敏感數據,因而使用了get的方式來提交表單。html
html<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>添加僱員</title> </head> <body> <form action="emp_insert_do.jsp" method="get"> 僱員ID: <input type="text" name="empno"/> <br/> 姓名: <input name="ename" type="text"/> <br/> 工做: <input name="job" type="text"/> <br/> 僱用日期: <input name="hiredate" type="text"/> <br/> 基本工資: <input name="sal" type="text"/> <br/> <input type="submit" value="註冊"/> <input type="reset" value="重置"/> </form> </body> </html>
其中emp_insert_do.jsp
這個文件正確的設置了編碼:java
request.setCharacterEncoding("utf-8");數據庫
可是真正存入到數據庫中的漢字是亂碼。瀏覽器
對於表單中POST
方式提交的數據,只要在接收數據的JSP中正確設置request.setCharacterEncoding·
參數,即將對客戶端請求進行從新編碼的編碼設置成瀏覽器編碼,就能夠保證獲得的參數編碼正確。有寫讀者可能會問,那如何獲得瀏覽器編碼呢?上面咱們提過了,在默認請狀況下,瀏覽器編碼就是你在響應該請求的JSP頁面中response.setCharacterEncoding
設置的值。因此對於POST表單提交的數據,在得到數據的JSP頁面中request.setCharacterEncoding
要和生成提交該表單的JSP頁面的 response.setCharacterEncoding
設置成相同的值。jsp
對於URL提交的數據和表單中GET方式提交的數據,在接收數據的JSP中設置request.setCharacterEncoding
參數是不行的,由於在Tomcat5.0中,默認狀況下使用ISO- 8859-1
對URL提交的數據和表單中GET方式提交的數據進行從新編碼(解碼),而不使用該參數對URL提交的數據和表單中GET方式提交的數據進行從新編碼(解碼)。要解決該問題,應該在Tomcat的配置文件的Connector
標籤中設置useBodyEncodingForURI
或者URIEncoding
屬性,其中useBodyEncodingForURI
參數表示是否用request.setCharacterEncoding
參數對URL提交的數據和表單中GET方式提交的數據進行從新編碼,在默認狀況下,該參數爲false(Tomcat4.0中該參數默認爲true
); URIEncoding
參數指定對全部GET方式請求(包括URL提交的數據和表單中GET方式提交的數據)進行統一的從新編碼(解碼)的編碼。 URIEncoding
和useBodyEncodingForURI
區別是,URIEncoding
是對全部GET方式的請求的數據進行統一的從新編碼(解碼),而useBodyEncodingForURI
則是根據響應該請求的頁面的request.setCharacterEncoding
參數對數據進行的從新編碼(解碼),不一樣的頁面能夠有不一樣的從新編碼(解碼)的編碼。因此對於URL提交的數據和表單中GET方式提交的數據,能夠修改 URIEncoding
參數爲瀏覽器編碼或者修改useBodyEncodingForURI
爲true
,而且在得到數據的JSP頁面中 request.setCharacterEncoding
參數設置成瀏覽器編碼。編碼
對於同一個應用,最好統一編碼,推薦爲UTF-8,固然GBK也能夠。code
正確設置JSP的pageEncoding參數orm
在全部的JSP/Servlet中設置contentType="text/html;charset=UTF-8"或response.setCharacterEncoding("UTF-8"),從而間接實現對瀏覽器編碼的設置。htm
對於請求,可使用過濾器或者在每一個JSP/Servlet中設置request.setCharacterEncoding("UTF-8")。同時,要修改Tomcat的默認配置,推薦將useBodyEncodingForURI參數設置爲true,也能夠將URIEncoding參數設置爲 UTF-8(有可能影響其餘應用,因此不推薦)。utf-8