乱码总结(持续更新)
目录
总体分析
建议:先将本文中提到的走一遍,说不定乱码就消失了
1 CharacterEncodingFilter 设置forceResponseEncoding为true导致乱码
表现:CharacterEncodingFilter 设置forceResponseEncoding为true导致乱码,并且只有在访问静态资源的时候乱码,并且只是在通过tomcat导致乱码,通过浏览器正常访问文件没有乱码。静态资源也已经注明了
<meta charset="UTF-8">
答案:原因在tomcat
解决办法
-
apache-tomcat-9.0.34\conf\server.xml的第70行左右
Connector
标签添加URIEncoding="UTF-8"
👇<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
-
\apache-tomcat-9.0.34\bin\catalina.bat的大概第216行,有关
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
修改为set "JAVA 2cb5 _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.34\conf\web.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.54\conf\logging.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以后的配置文件。编码配置需要放在https://www.cnblogs.com/sogeisetsu/p/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
- volley开源库乱码问题总结(持续更新)
- javascript/jquery-知识点总结(持续更新)
- IDEA 常用快捷键总结---持续更新
- Highcharts技巧总结(持续更新)
- java总结(持续更新)
- ffmpeg开发:小知识点总结(持续更新)
- Unity 相关经典博客资源总结(持续更新)
- ubuntu系统git,adb等命令总结----持续更新!
- Qt QDialog用法总结 笔记(持续更新中)
- Android面试总结持续更新中
- 前端面试题总结(持续更新)
- 性能相关命令总结(持续更新中)
- linux常用工具总结(持续更新)
- The Elements of Statistical Learning 读书总结(持续更新中)
- 【专题总结】概率与期望(持续更新)
- 游戏开发中的原则性问题总结(持续更新)
- Extjs 4.0.7 中经验总结(--持续更新)
- 大学期间用得到的资源网站(持续更新2020.4.30),自己总结,资料(电子书籍)、下载(程序、安装包)、PPT等
- 《Numpy》常用用法总结(持续更新)
- linux内核常用宏实例总结-----持续更新