我的网站

欢迎来到苏月晟的博客

Sans la liberté de blamer, il n'est point d'éloge flatteur || 若批评不自由,则赞美无意义。
扩大
缩小

乱码总结(持续更新)

总体分析

建议:先将本文中提到的走一遍,说不定乱码就消失了

1 CharacterEncodingFilter 设置forceResponseEncoding为true导致乱码

表现:CharacterEncodingFilter 设置forceResponseEncoding为true导致乱码,并且只有在访问静态资源的时候乱码,并且只是在通过tomcat导致乱码,通过浏览器正常访问文件没有乱码。静态资源也已经注明了<meta charset="UTF-8">

答案:原因在tomcat

解决办法

  1. 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"
               />
    
  2. \apache-tomcat-9.0.34\bin\catalina.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
    
  3. \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以后的配置文件。编码配置需要放在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

posted on 2020-05-13 00:15  sogeisetsu  阅读(538)  评论(0编辑  收藏  举报

导航