首先出現中文亂碼的緣由是tomcat默認的編碼方式是"ISO-8859-1",這種編碼方式以單個字節做爲一個字符,而漢字是以兩個字節表示一個字符的。前端
對於get請求解決中文亂碼有兩種途徑java
一種是修改tomcat默認的編碼方式爲"UTF-8"web
在tomcat的server.xml裏把spring
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>tomcat
修改成服務器
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>app
另外一種則是代碼層次解決中文亂碼,該方式須要前端與後臺都要作相應編碼post
來自頁面的一個get請求:編碼
window.location.href = getContextPath()+"/manage/user/detail?name="+encodeURI(encodeURI("小明"));url
服務器端:
String name = request.getParameter("name");
orgname = URLDecoder.decode(name,"UTF-8");
由於get請求的參數在請求行上,咱們不能像解決post請求那樣使用 request.setCharacterEncoding("UTF-8");這種方式是修改方法體的編碼方式。
因此只能使用以上的方式分別對請求行的漢字進行編碼和解碼。其實解決get請求中文亂碼問題最好的方式是避免使用中文,若帶有中文參數儘可能使用post請求進行傳遞。
對於post請求,請求中問亂碼的兩種解決辦法,就喜聞樂見了。通常也不會有post請求參數中文亂碼吧,任何一個java的web項目應該都配置了字符集過濾器。
(1): request.setCharacterEncoding("UTF-8");
(2):
<filter> <description>字符集過濾器</description> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <description>字符集編碼</description> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>