Springmvc中文亂碼解決辦法

菜雞03號發表於2016-08-29

   

JAVAEE的Servlet框架是Web應用中充當中央控制器的角色,採用HTTP協議的請求響應機制實現前端與後臺的資料傳輸和交換,出於網路頻寬和安全方面的考慮這些需要傳輸的資料不是以明文文字的格式進行傳輸的,需要一定的編碼格式進行處理——這就促使MIME型別資料的誕生,實現這種型別的演算法叫URLEncoding。

JAVAWeb伺服器都實現了URLEncoding演算法。無論GET還是POST請求都使用這一演算法實現對傳輸資料進行編碼。可令人深惡的是,除了英文字母和數字,Web伺服器都能自動編碼和解碼外,其餘的的一律由使用者自行處理。所以做web應用開發的中國人處理應用的亂碼是必不可少的一門技能


 A.先查明伺服器字符集。tomcat預設使用的字符集是“ISO8859-1”而Weblogic預設是“UTF-8”,所以需要注意跨伺服器的程式碼。

B.  伺服器的編碼解碼機制。編碼:伺服器在處理客戶端的JSP中請求時就先以預設的字符集將請求資料進行編碼,然後才將編碼後的資料再進行URLencoding;解碼:資料傳輸到後臺應用處理程式時,就進行了一次URLdecoder,所以留給後臺處理程式的資料是經過應用伺服器編碼過的資料,這裡需要程式設計師進行處理。

C. 無論請求還是轉發(forward),伺服器都要進行一次編碼


1.通過CharacterEncodingFilter來解決post亂碼

<!-- post亂碼處理器 -->
  <filter>
    <filter-name>sEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
     <filter-name>sEncodingFilter</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>

2.通過修改tomcat配置檔案來解決get亂碼

tomacat對GET和POST請求處理方式是不同的,要處理針對GET請求的編碼問題,則需要改tomcat的server.xml配置檔案,如下:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

改為:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>

最關鍵的點在這裡:如果你是更改的tomcat安裝目錄的server.xml配置檔案,那麼在用eclipse執行專案時會發現配置沒起作用,其實是因為eclipse在執行專案時是用的eclipse中配置的tomcat,那麼問題就好解決了,開啟eclipse中的tomcat配置檔案,改為如下即可:

 

:配置useBodyEncodingForURI="true"後,可以解決普通get請求的中文亂碼問題,但是對於通過ajax發起的get請求中文依然會亂碼,請把useBodyEncodingForURI="true"改為URIEncoding="UTF-8"即可。

3.也可以通過自己寫程式碼的方式進行get亂碼解決

 @RequestMapping("/sing")
     public String garbled(String name) throws UnsupportedEncodingException{
    	 System.out.println(new String(name.getBytes("ISO8859-1"),"UTF-8"));
         return "/WEB-INF/jsp/index.jsp";
     }



相關文章