乱码总结(持续更新)
Posted sogeisetsu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乱码总结(持续更新)相关的知识,希望对你有一定的参考价值。
总体分析
建议:先将本文中提到的走一遍,说不定乱码就消失了
1 CharacterEncodingFilter 设置forceResponseEncoding为true导致乱码
表现:CharacterEncodingFilter 设置forceResponseEncoding为true导致乱码,并且只有在访问静态资源的时候乱码,并且只是在通过tomcat导致乱码,通过浏览器正常访问文件没有乱码。静态资源也已经注明了<meta charset="UTF-8">
答案:原因在tomcat
解决办法
-
apache-tomcat-9.0.34confserver.xml的第70行左右
Connector
标签添加URIEncoding="UTF-8"
??<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
-
apache-tomcat-9.0.34incatalina.bat的大概第216行,有关
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
修改为set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8
-
apache-tomcat-9.0.34confweb.xml的第126行,对于DefaultServlet的配置,修改如下??
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>fileEncoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
2 tomcat控制太乱码
表现:在运行tomcat的时候控制台乱码
答案:tomcat的apache-tomcat-8.5.54conflogging.properties里面配置的编码格式和控制台不一样,windows系统,win10下的idea默认控制台编码gbk
解决方法
java.util.logging.ConsoleHandler.encoding = GBK
设置java.util.logging.ConsoleHandler.encoding和控制台编码一致
3 springmvc前后端数据传输乱码
表现:前后端的传输数据乱码
原因:request和response的问题
解决方法
在项目web.xml配置监听器,修改乱码??
<filter>
<filter-name>filterForCharSet</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>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filterForCharSet</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4 @ResponseBody导致乱码
表现:@ResponseBody返回的数据乱码
原因:@ResponseBody乱码原因??
在spring处理ResponseBody时涉及到org.springframework.http.converter.StringHttpMessageConverter这个类,该类在默认实现中将defaultCharset设为ISO-8859-1。当@RequestMapping标记的方法未配置produces属性时,将自动使用默认编码;如果配置了produces属性,AbstractHttpMessageConverter中的write方法将不会受supportedMediaTypes影响,而用produce设置的header赋值给contenttype。改造一下RequestMappingHandlerAdapter的配置,springMvc.xml如下:
注意:基于spring3.2以后的配置文件。编码配置需要放在mvc:annotation-driven/之前,否则无效。
版权声明:本文为CSDN博主「c.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/cckevincyh/article/details/81227864
@ResponseBody乱码问题解决
配置spring容器??
<!-- @Response乱码问题解决-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" >
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=utf-8</value>
<value>text/html;charset=UTF-8</value>
<value>applicaiton/*;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
其他解决办法?? https://blog.csdn.net/cckevincyh/article/details/81227864 https://www.cnblogs.com/zou-zou/p/9345485.html
以上是关于乱码总结(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章