1. 程式人生 > >如何利用URIEncoding和useBodyEncodingForURI解決tomcat中文亂碼問題

如何利用URIEncoding和useBodyEncodingForURI解決tomcat中文亂碼問題

參考:http://blog.itpub.net/29254281/viewspace-1073278/

http://cmsblogs.com/?p=1510

亂碼問題彙總:


1> 在tomcat的server.xml設定<Connector URIEncoding="utf-8"  />, 使用utf8對URI中出現的中文進行decode,例如http://localhost:8080/test/測試.do -> http://localhost:8080/test/%E6%B5%8B%E8%AF%95.do, 這樣能夠找到對應的controller方法。若不設定使用預設值ISO-8859-1


2> 在tomcat的server.xml設定<Connector useBodyEncodingForURI="true"  /> 能夠解決query String的亂碼問題。
useBodyEncodingForURI=true -> 使用http header中指定charset進行decode(例如:Content-Type: charset=UTF-8),若未指定,則使用預設值ISO-8859-1
useBodyEncodingForURI=false -> 使用預設值ISO-8859-1


3> 若只配置了URIEncoding="utf-8",則query string的編碼也會被設定為utf-8,且http header中設定的charset不會重寫這個編碼。若同時設定了兩項,則對於query string的編碼,則與設定useBodyEncodingForURI=true的作用是一樣的(會被http header中的charset重寫)


4> 建議使用utf-8為主,可以在web.xml 中配置encoding filter來指定預設的編碼為utf-8,避免亂碼問題的出現。
 <filter>
    <filter-name>encoding_filter</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>encoding_filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>