2012-11-22 45 views
13

मुझे कुछ मदद चाहिए।वर्ण एन्कोडिंग को सही करने के लिए org.springframework.web.filter.CharacterEncodingFilter का उपयोग कैसे करें?

मैं अपने 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 टर्मिनल इसकी ठीक से बचाने में ñ बचाने की कोशिश की। मुझे संदेह है कि समस्या मेरे सर्वर या मेरे कार्यक्रम में है। कृपया मदद करे।

उत्तर

3

करें कि आप अपने jsp में निम्नलिखित स्निपेट है

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

और भी web.xml फ़ाइल

+0

मेरे पास यह है कि मेरे जेएसपी पेज में और एन्कोडिंगफिल्टर मेरे web.xml में पहला फ़िल्टर है। – TheOnlyIdiot

18

मैं web.xml में इस के साथ सफलतापूर्वक करने की कोशिश की में यह सुनिश्चित करें कि encodingFilter पहले फिल्टर है बनाओ!

<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

फिर से धन्यवाद। मैंने किसी भी तरह से url-mapping में * खो दिया और फ़िल्टर काम करना बंद कर दिया। लापता सितारा को खोजने के लिए मुझे थोड़ी देर लग गई। ऊपर पोस्ट किया गया यह मार्कअप पूरी तरह से काम करता है, बस सुनिश्चित करें कि आप यूआरएल-पैटर्न से स्टार को नहीं हटाते हैं :-) –

1

मेरे समाधान, स्प्रिंग (3.2.x) AnnotationConfigWebApplicationContext, पर स्प्रिंग फ्रेमवर्क संदर्भ आधारित का उपयोग कर:

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

वसंत बूट में काम करने के लिए आप उपयोग कर सकते

@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

यह देर हो सकती है, लेकिन इसे कॉन्फ़िगर करना बेहतर है बिल्ला 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's 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 */ 
    } 
    } 

}

+0

धन्यवाद। यह काम कर रहा है। –