[size=medium]后端的Tomcat server.xml里配置的<Connector URIEncoding="UTF-8" ...>编码设置,
只对请求的url进行utf8解码, 也就是能正常解析出get方法的参数.
但是对于Post方法, 因为参数是在请求体里面的, 这个编码设置并不会影响到Post的参数,
这个跟浏览器有关,
如果是firefox,会带上头信息:
content-type = application/x-www-form-urlencoded; charset=UTF-8
里面包含了请求体的编码信息(UTF-8),
所以Springmvc可以对post方法的参数正常解析出参数值.
但如果是chrome,则没有编码信息:
content-type = application/x-www-form-urlencoded
这时Springmvc采用默认的编码(ISO-8859-1)进行解析参数, 这时就会出现乱码问题.
解决的方式是加上spring的编码filter, [/size]
只对请求的url进行utf8解码, 也就是能正常解析出get方法的参数.
但是对于Post方法, 因为参数是在请求体里面的, 这个编码设置并不会影响到Post的参数,
这个跟浏览器有关,
如果是firefox,会带上头信息:
content-type = application/x-www-form-urlencoded; charset=UTF-8
里面包含了请求体的编码信息(UTF-8),
所以Springmvc可以对post方法的参数正常解析出参数值.
但如果是chrome,则没有编码信息:
content-type = application/x-www-form-urlencoded
这时Springmvc采用默认的编码(ISO-8859-1)进行解析参数, 这时就会出现乱码问题.
解决的方式是加上spring的编码filter, [/size]
<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>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</filter>