編寫項目中突然用到了中文,然後發生了一大堆的亂碼,於是在百度上奮鬥良久,終於解決了問題。
項目在java8環境下搭建,使用spring4.3.6
1)前端頁面部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登錄--統一後臺管理系統</title>
<link rel="stylesheet" href="../font/iconfont/iconfont.css">
<link rel="stylesheet" href="../css/basic.css">
<link rel="stylesheet" href="../css/login.css">
</head>
<body>
<div class="login-container">
<div class="login-main">
<meta>標籤設置頁面的編碼方式,html5之後可以省略寫成<meta charset="UTF-8">,是<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />的簡略縮寫。
2)服務器端
網上經常看到的是
<filter>
<filter-name>characterEncodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然而使用之後發現並沒有生效,查看org.springframework.web.filter.CharacterEncodingFilter包後發現了大問題。
public class CharacterEncodingFilter extends OncePerRequestFilter {
private String encoding;
private boolean forceRequestEncoding = false;
private boolean forceResponseEncoding = false;
/**
* Create a default {@code CharacterEncodingFilter},
* with the encoding to be set via {@link #setEncoding}.
* @see #setEncoding
*/
public CharacterEncodingFilter() {
}
/**
* Create a {@code CharacterEncodingFilter} for the given encoding.
* @param encoding the encoding to apply
* @since 4.2.3
* @see #setEncoding
*/
public CharacterEncodingFilter(String encoding) {
this(encoding, false);
}
forceEncoding是在request請求已有編碼方式時,強行替換編碼方式的條件,默認爲false,然而這裏被拆分成forceRequestEncoding和forceResponseEncoding兩個部分,所以web.xml需要進行調整,調整之後爲
<!-- 字符過濾 -->
<filter>
<filter-name>encodingFilter</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>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
修改完畢後繼續測試,依舊亂碼!!!
百度之後發現,編碼器如果沒有正確設置,哪怕用了過濾器也會亂碼,繼續修改
設置完畢在測試,依舊亂碼!!!!!
繼續百度,終於發現,request.setCharacterEncoding()方法只針對post方法有效,對於get方法emmm,修改之後終於沒有討厭的亂碼了。
至此問題解決!
ps:get方法中文亂碼,如果有什麼好的解決辦法希望能教我一下,感謝!