*強調內容*javaweb項目JSP載入靜態資源出現中文亂碼
首先介紹自己在編碼方面遇到的一亂碼問題:jsp頁面載入時,載入中文名的靜態資源,出現亂碼,自然就擷取不到請求資源,無法加重了,jsp頁面是沒有亂碼的。但是後台配置了編碼過濾器的,為什麼還會亂碼呢。
網上搜尋答案,雖然找到瞭解決問題的方法,但是沒有理解原因。 首先先看看亂碼的解決方案
http://blog.csdn.net/haitianxiaowu1/article/details/52460105(轉載),這位博主的編碼解決方案,對於我這種菜鳥足夠了。
一、瞭解常識
1.UTF-8國際編碼,GBK中文編碼。GBK包含GB2312,即如果通過GB2312編碼後可以通過GBK解碼,反之可能不成立;
2、web tomcat:預設是ISO8859-1,不支援中文的
3.Java.nio.charset.Charset.defaultCharset() 獲得平台預設字元編碼;
4.getBytes() 是通過平台預設字元集進行編碼;
二、引入
在學習任何一門技術時,經常會有初學者遇到中文亂碼問題,比如MySQL,是因為在安裝時沒有設定;而在Servlet中,也會遇到中文亂碼問題;
比如:
OutputStream out = response.getOutputStream();
out.write(String );
輸出中文時可能會出現亂碼;
輸出亂碼的問題是程式用UTF-8編碼,而瀏覽器預設用GBK解碼了,因此會出現亂碼;
三、Servlet相關的幾種亂碼
1、瀏覽器調用jsp,html等頁面中文顯示亂碼
1)檔案本身是以utf-8編輯儲存的(myEclipse中在properties中滑鼠右鍵選擇utf-8)
(2)瀏覽器用utf-8解析:
(手動)==> 在瀏覽器中右鍵選擇編碼格式為utf-8
(智能)==> 在檔案中寫入如: 通過標籤類比response頭,起到告訴瀏覽器用utf-8的編碼解析
(智能)==> response.setContentType(“text/html;charset=UTF-8”);起到告訴瀏覽器用utf-8的編碼解析
==>GET請求(URI方式傳遞參數亂碼):主要相關內容
出現情況:瀏覽器訪問
如:顯示使用者名稱和密碼
解決方案:問題本質是get方式傳遞的參數內容預設編碼方式問ISO8859-1,而且使用request.setCharacterEncoding(“utf-8”)也無法解決問題。
法一:要解決這個問題,修改tomcat伺服器的設定檔。修改tomcat目錄下的conf/server.xml檔案的第43行:
修改前內容:
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="200000" redirecPort="8443"/>
修改後內容:
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="200000" redirecPort="8443" URIEncoding="utf-8"/>
法二:String usernameString = new String(username.getBytes("ISO-8859-1"),"UTF-8");
借鑒了一堆別人的東西,下面說明我配置了編碼過濾器為什麼還會出現中文亂碼的原因:
jsp頁面載入時,會載入src引入的靜態資源,請求方式是GET,而GET方式的請求會經過tomcat,在沒有配置tomcat解析請求的解碼方式的情況下,預設是ISO-8859-1,然後再經過後台配置的編碼過濾器解析時,由於請求已經經過tomcat的解析,編碼過濾器再次解析請求地址時,就會出現中文亂碼。
個人理解,如有錯誤,希望大神指教,方便學習