您的位置:首页 > 其它

乱码总结(持续更新)

2020-05-13 00:15 10 查看

目录

  • 2 tomcat控制太乱码
  • 3 springmvc前后端数据传输乱码
  • 4 @ResponseBody导致乱码

    总体分析

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

    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
      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
    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以后的配置文件。编码配置需要放在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

  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: