2012-11-22 13 views
13

Ho bisogno di aiuto.come utilizzare org.springframework.web.filter.CharacterEncodingFilter per correggere la codifica dei caratteri?

Ho inserito lo snippet di codice qui sotto nel mio 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> 

e nel mio server.xml:

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

mie pagine JSP sono codificati come UTF-8 e la mia tabella di MySQL è codificati come utf8_general_ci.

Il mio problema è che ogni volta che si salva uno ñ diventa ?.

Quando ho tentato di salvare manualmente ñ nel terminale mysql, il suo salvataggio è corretto. Sospetto che il problema si trovi nel mio server o nel mio programma. Per favore aiuto.

risposta

3

Assicurati di avere il seguente frammento nel jsp

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

e anche fare in modo che il encodingFilter è il primo filtro in web.xml file di

+0

Ce l'ho nella mia pagina jsp e anche encodingFilter è il primo filtro nel mio web.xml. – TheOnlyIdiot

18

ho provato con successo con questo in 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> 
+0

Grazie ancora. In qualche modo ho perso il * nella mappatura url e il filtro ha smesso di funzionare. Mi ci è voluto un po 'per individuare la stella mancante. Questo markup che hai postato sopra funziona perfettamente, ma assicurati di non rimuovere la stella dall'url-pattern :-) –

1

La mia soluzione, utilizzando Primavera AnnotationConfigWebApplicationContext (3.2.x), sulla base di Spring Framework di riferimento:

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

a lavorare in avvio primavera è possibile utilizzare

@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

2

potrebbe essere un po 'tardi, ma è meglio configurarlo in Tomcat conf/web.xml (o per il progetto in 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> 

Vedere http://wiki.apache.org/tomcat/FAQ/CharacterEncoding o tomcat's web.xml

O per pontile come questo:

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 */ 
    } 
    } 

}

+0

Grazie.Il suo funzionamento. –

Problemi correlati