【问题标题】:how to use org.springframework.web.filter.CharacterEncodingFilter to correct character encoding?如何使用 org.springframework.web.filter.CharacterEncodingFilter 来纠正字符编码?
【发布时间】:2012-11-10 09:09:01
【问题描述】:

我需要一些帮助。

我将下面的代码 sn-p 放在我的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>
</filter>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

在我的server.xml:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

我的jsp页面编码为UTF-8,我的mysql表编码为utf8_general_ci

我的问题是,每当我保存 ñ 时,它就会变成 ?

当我尝试在 mysql 终端中手动保存 ñ 时,它的保存正确。我怀疑问题出在我的服务器或程序中。请帮忙。

【问题讨论】:

    标签: spring hibernate character-encoding tomcat6


    【解决方案1】:

    我在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>
    

    【讨论】:

    • 再次感谢。我不知何故在 url-mapping 中丢失了 * 并且过滤器停止工作。我花了一段时间才发现那颗失踪的星星。您在上面发布的这个标记非常有效,只要确保您没有从 url 模式中删除星号 :-)
    【解决方案2】:

    要在 Spring Boot 中工作,您可以使用

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
    
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(filter);
        registrationBean.addUrlPatterns("/*");
        return registrationBean;
    }
    

    another response

    【讨论】:

      【解决方案3】:

      确保你的jsp中有以下sn-p

      <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>
      

      还要确保encodingFilterweb.xml 文件中的第一个过滤器

      【讨论】:

      • 我的 jsp 页面中有这个,encodingFilter 也是我 web.xml 中的第一个过滤器。
      【解决方案4】:

      我的解决方案,使用 Spring (3.2.x) AnnotationConfigWebApplicationContext,基于 Spring Framework Reference:

      public class StudentApplicationConfig extends AbstractDispatcherServletInitializer {
      
      @Override
      protected WebApplicationContext createServletApplicationContext() {
      
          AnnotationConfigWebApplicationContext dispatcherContext
                  = new AnnotationConfigWebApplicationContext();
          dispatcherContext.register(DispatcherConfig.class);
          return dispatcherContext;
      }
      
      @Override
      protected String[] getServletMappings() {
      
          return new String[] { "/" };
      }
      
      @Override
      protected WebApplicationContext createRootApplicationContext() {
      
          AnnotationConfigWebApplicationContext appContext
                  = new AnnotationConfigWebApplicationContext();
          return appContext;
      }
      
      @Override
      protected Filter[] getServletFilters() {
          Filter[] filters;
      
          CharacterEncodingFilter encFilter;
          HiddenHttpMethodFilter httpMethodFilter = new HiddenHttpMethodFilter();
      
          encFilter = new CharacterEncodingFilter();
      
          encFilter.setEncoding("UTF-8");
          encFilter.setForceEncoding(true);
      
          filters = new Filter[] {httpMethodFilter, encFilter};
          return filters;
      }
      

      【讨论】:

        【解决方案5】:

        可能有点晚了,但最好在 tomcat conf/web.xml 中配置(或 web.xml 中的项目)

        <filter>
            <filter-name>SetCharacterEncoding</filter-name>
            <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>SetCharacterEncoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        

        http://wiki.apache.org/tomcat/FAQ/CharacterEncoding或tomcat的web.xml

        或者像这样的码头:

        public class StartEmbeddedJetty{
        
        public static void main(String[] args) throws Exception {
            Server server = new Server(8080);
            ServletContextHandler sch = new ServletContextHandler();
            sch.addFilter(CharacterEncodingFilter .class, "/*", EnumSet.of(DispatcherType.REQUEST));
              ...
            server.start();
            server.join();
        }
        
        public static class CharacterEncodingFilter implements Filter {
             @Override
             public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
                // set encoding to utf-8
                req.setCharacterEncoding("UTF-8");
                res.setCharacterEncoding("UTF-8");
             }
        
             @Override
             public void init(FilterConfig arg0) throws ServletException {
                /* empty */
             }
        
             @Override
            public void destroy() {
                /* empty */
            }
           }
        

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-05
          • 1970-01-01
          • 2010-10-01
          • 1970-01-01
          • 2013-07-12
          相关资源
          最近更新 更多