3 回答

飲歌長嘯
TA貢獻1951條經(jīng)驗 獲得超3個贊
如果你的請求是post,中文應(yīng)該不會有亂碼。如果有,看看你的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> ????????<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>
如果你的請求是get,參數(shù)有中文的,比如 ?name=張上,按照如下處理
前端encodeURIComponent(encodeURIComponent(url)),對url進行二次編碼。
后端:拿到參數(shù)值,使用URLDecoder.decode(s, "UTF-8")解碼一下。這樣方式確實可行的,答主在實際項目總使用過。
舉個例子吧:
前端:
??<script?type="text/javascript"> ???var?url?=?"/xxx/param/test"; ????? ?????var?name?=?"張上"; ????? ?????name?=?encodeURIComponent(name); ?????name?=?encodeURIComponent(name);//二次編碼 ?????alert(name); ?????url?=?url?+?"?name="+name; ?????window.location.href?=?url; ?????</script>
后端:
@Controller @RequestMapping(value="/param") public?class?ParamController?extends?BaseController<ParamEntity>?{ ????/** ?????*?@throws?UnsupportedEncodingException? ?????*? ?????*/ ????@RequestMapping(value="/test",method=RequestMethod.GET) ????public?String?test(@RequestParam("name")?String?name)?throws?UnsupportedEncodingException{ ????????name?=?URLDecoder.decode(name,?"UTF-8");//實測,可以正確的得到中文。 ????????System.out.println(name); ????????return?"index"; ????} }
注意:get請求有中文參數(shù),可以指定容器使用何種編碼規(guī)則來解碼提交的參數(shù),但是這種做法不建議使用,推薦使用二次編碼吧。

aluckdog
TA貢獻1847條經(jīng)驗 獲得超7個贊
String name = request.equest.getParameter("name"); 獲取到有可能亂碼的值
if (name.equals(new String(name.getBytes("iso8859-1"),"iso8859-1"))) {
name = new String(name.getBytes("iso8859-1"), "utf-8"); 轉(zhuǎn)碼后的值
}
添加回答
舉報
0/150
提交
取消