情況一: ajax中傳值時是亂碼(后台可以獲取到中文字符,但用@ResponseBody返回時前台為亂碼)
情況二: Controller 中 request.getParameter()獲取到的是亂碼
@RequestMapping(params = "method=submit") public String submit(HttpServletRequest request, ModelMap modelMap) throws Exception{ String uname = request.getParameter("uname"); . . . return "index_view"; }
Request默認編碼是iso-8859-1,而前台是utf-8編碼,導致獲取值輸出發現是亂碼。從網上找了很多種辦法,以下方法都沒有生效:
1. 添加filter
jsp頁面中文輸入,到controller亂碼,這時候需要設置的是在web.xml文件中添加一個編碼的過濾器(filter)將編碼統一為UTF-8,代碼如下:
Web.xml配置文件:
<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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
這里需要注意的是,最好把這段代碼放在web.xml中開頭的位置,因為攔截有順序,如果放在后面的話容易攔截不到。
2. 設置request字符集
往往從前台傳入到對應的controller或者是action之后出現亂碼,講講我一般的思路是先打印request本身默認的字符集
System.
out
.println(request.getCharacterEncoding());
接着按照情況,如果打印的不是所需要的字符集則設置相應字符集即可
request.setCharacterEncoding(
"UTF-8"
);
有效解決辦法: 獲取時從iso-8859-1轉化成utf-8格式。(但此方法較為麻煩)
@RequestMapping(params = "method=submit") public String submit(HttpServletRequest request, ModelMap modelMap) throws Exception{ String uname = new String((request.getParameter("uname")).getBytes("iso-8859-1"),"utf-8"); . . . return "index_view"; }
情況三: