springMVC框架下編碼與解碼(中文亂碼)

編寫項目中突然用到了中文,然後發生了一大堆的亂碼,於是在百度上奮鬥良久,終於解決了問題。

項目在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方法中文亂碼,如果有什麼好的解決辦法希望能教我一下,感謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章