写这篇博客主要就是在做项目的时候,碰到后台到前台数据乱码的问题,并借此总结平常碰到的各种编码设置,并且也百度了很多,有时候也是经常想不起来,所以记录一下,方便以后查看!!!
场景:
在实际运用场景中,当前台发起请求后,我们需要从后台返回数据给前台(前台模糊查询),这时,如果返回的数据中包含中文,则经常会出现在后台查询出来都是好好,但是传输回去就莫名的乱码了,而且,我们明明已经在 web.xml 中进行编码过滤了,但还是乱码,让人很烦!
解决办法:
第一种:那就在 controller 中的每个方法的 @RequestMappering 注解中进行编码设置
@RequestMapping(value = "/queryUserById",produces = "text/plain;charset=utf-8")
上面这种可以解决乱码,但是要在没一个注解中都写上这种,感觉代码看起来也不美观,而且都是做着重复的动作,所以,本人很喜欢用第二种方法。
第二种:直接在spring-mvc.xml的配置文件中,自定义消息转换器的编码,这样就可以设置一次就行了
<!-- 解决前台到后台传参数造成的中文乱码问题 -->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=utf-8</value>
<value>text/html;charset=utf-8</value>
<value>application/x-www-form-urlencoded</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
以上就可以解决不用配置多次,重复写一样的代码就可以解决,有的人可能习惯这样写,有的不习惯,所以也有很多种方法,大家也可以完全写编码自定义类,然后交给spring处理,都是可以的。
第三种:设置tomcat编码:为解决以get方式提交的参数出现乱码,添加
修改tomcat下的conf/server.xml文件, 添加URIEncoding=”UTF-8”
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
第四种:可以在每一个方法内的最前面加上以上代码
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
最基本配置就是在web.xml中采用编码过滤器来解决数据传输的中文问题。在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>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
解决HTML页面中的中文问题:
<META http-equiv=Content-Type content="text/html;charset=utf-8">
解决JSP页面中的中文问题
<%@ page contentType="text/html;charset=utf-8" language="java"%>
如果以上写的哪里有问题,请敬请谅解!