1.get请求的参数乱码
方案一
String param=new String (param.getBytes("ISO-8859-1"),"UTF-8");
也可以通过装饰者+过滤器配置上面的配置:https://blog.csdn.net/haohsq/article/details/83512205
方案二(不推荐)
在tomcat的config下的server.xml中添加URIEncoding="UTF-8"
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
注:如果在springMVC配置了json转换器后,复杂参数用@RequestBody接收也不会有中文乱码,具体见下面的响应乱码-方案二)
2.post请求的参数乱码
在web.xml中添加如下代码即可
<!--=========解决post请求时参数乱码=========-->
<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>
3.响应时中文乱码
方案一:
produces={ "application/json;charset=UTF-8;"}
或
produces={"text/html;charset=UTF-8;", "application/json;charset=UTF-8;"}
方案二:
如果在springmvc.xml中使用fastjson转换数据,也可解决乱码,搭配@RestController使用
<mvc:annotation-driven>
<!--使用fastjson转换数据,可解决乱码-->
<mvc:message-converters register-defaults="true">
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
</list>
</property>
<property name="features">
<list>
<value>WriteMapNullValue</value>
<value>QuoteFieldNames</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
----------------------------------------------------------------------------------------------------------
传统原生的解决乱码方式(不一定还有效):
request乱码
// get请求时(实践证明get的也可用于post):
String name=new String (name.getBytes("ISO-8859-1"),"UTF-8");(通用)
// post请求时(request的缓冲区也是ISO-8859-1):
req.setCharacterEncoding(“UTF-8”);
response乱码
// 通用
res.setContentType("text/html;charset=UTF-8");
1,如果中文返回出现"??"
response.setCharacterEncoding(“UTF-8”);
2,如果返回的是“烇湫”这种乱码,说明浏览器的解析问题,应该检查下是否忘加response.setHeader(“Content-type”, “text/html;charset=UTF-8”);