客戶端訪問服務器的頁面時,填寫相關信息並提交
————1————》
信息被封裝到request對象中,封裝時採用的是頁面設置的編碼格式,咱們通常設置的都是UTF-8
設置頁面編碼格式
一、設置 HTML 頁面編碼格式爲 UTF-8
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
二、設置 HTML 頁面語言爲中文
<meta http-equiv="content-language" content="zh-CN" />
三、設置 JSP 頁面編碼格式爲 UTF-8
<%@ page contentType="text/html;charset=UTF-8" %>
————2————》
服務器再解析出相關信息,默認採用的編碼格式爲ISO8859,因此就會出現亂碼
能夠看出問題就出如今服務器解析request對象中的信息採用的編碼格式和以前的編碼格式不一致形成的,因此咱們只要設置一下服務器解析request對象時的編碼格式也爲UTF-8便可。
request.setCharacterEncoding("UTF-8");
須要注意的是:
此方法只對POST請求方式下的亂碼問題有效。
那對於GET方式的亂碼問題,須要咱們對「服務器在request對象解析出的亂碼」再進行編碼:
一、服務器不是以ISO8859進行解析的嘛,假如:
String username = request.getParameter("username");
此時username中保存的數據對應的是ISO
8859編碼庫中的信息
二、咱們先找出username在此編碼庫中對應的信息:
username.getBytes("iso8859-1");
三、再以UTF-8的編碼格式對其進行再解析:
username = new String(username.getBytes("is08859-1"), "UTF-8");
四、這樣此時的username中保存的數據就是以UTF-8編碼的了,就不會出現亂碼問題了
一樣,在超連接地址後
<a href="/locationURL?username=中國">超連接</a>
所帶的中文信息,也要以GET方式對應的方法來解決。
username = new String(username.getBytes("is08859-1"), "UTF-8");
**************************************************************************************************
如下方法最好不要使用,最好使用上面所說的方法
**************************************************************************************************
另外:
咱們能夠經過修改服務器的配置信息,來統一解決亂碼,不管是哪一種方式的請求,均可以搞的定,可是開發過程最好不要使用這種方式。
以Tomcat爲例,咱們能夠修改conf目錄下的server.xml文件:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
能夠爲Connector增長相關屬性:
URIEncoding="UTF-8" 設置服務器的編碼格式
對於剛開始所說的
request.setCharacterEncoding("UTF-8");
只對POST方式有效,GET無效的問題,咱們能夠爲Connector增長如下屬性:
useBodyEncodingForURI="true" 就可使GET方式下也使用UTF-8編碼