經過response對象向頁面輸出內容時遇到的亂碼問題可分爲兩種狀況html
1.字節流java
字節流輸出時能夠經過設置響應頭"Content-Type"的值爲"text/html;charset=UTF-8"來制定瀏覽器打開頁面時用的編碼,並在寫入時經過相應編碼傳入字符串的字節數組,如 經過"中文".getBytes("UTF-8")獲取中文部分的UTF-8編碼的字節數組。數組
2.字符流瀏覽器
response字符流對象中存在一個緩衝區,用來將字符串轉換爲指定編碼的字節數組,默認狀況下response緩衝區的編碼默認值是ISO-8859-1,所以如不加以設定,中文內容一定會呈現亂碼。能夠經過response.setCharacterEncoding("UTF-8")方法來設置緩衝區的編碼,再經過response.setHeader("Content-Type", "text/html;charset=UTF-8");將瀏覽器打開頁面的編碼設置爲與緩衝區編碼相同,爲了簡化書寫,java提供了response.setContentType("text/html;charset=UTF-8");方法代替上述兩步操做。tomcat
經過request對象從請求中讀取內容時遇到的亂碼問題也可分爲兩種狀況編碼
1.POST方式url
POST方式下,存在一個緩衝區,用來將請求體中的內容由字節流經過指定編碼解碼爲字符流,默認狀況下緩衝區的默認編碼爲ISO-8859-1,要解決亂碼問題,只需經過request.setCharacterEncoding("utf-8"); 方法將緩衝區編碼指定爲UTF-8便可。code
2.GET方式server
因爲在GET方式下,須要傳遞的內容直接存在於請求頭的url後,數據的編碼通常爲UTF-8,而url的默認編碼爲ISO-8859-1,通常來講有三種方式能夠解決中文亂碼問題。xml
(修改配置文件中uri的編碼方式)
解決方案一:修改tomcat/conf/server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
(獲取亂碼內容後經過ISO-8859-1編碼表反向查出原始數據,再經過UTF-8碼錶查出正確內容)
解決方案二:逆向編解碼
username = URLEncoder.encode(username, "ISO8859-1");
username = URLDecoder.decode(username, "utf-8");
解決方案三:簡寫的方式(推薦使用) username = new String(username.getBytes("ISO-8859-1"),"utf-8");