Как использовать 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, его сохранение будет выполнено правильно. Я подозреваю, что проблема заключается в моем сервере или моей программе. Пожалуйста, помогите.
Ответы
Ответ 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>
Ответ 2
Для работы с загрузкой spring вы можете использовать
@Bean
public FilterRegistrationBean filterRegistrationBean() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(filter);
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
другой ответ
Ответ 3
Убедитесь, что у вас есть следующий фрагмент в вашем JSP
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>
а также убедитесь, что encodingFilter
является первым фильтром в файле web.xml
Ответ 4
Мое решение, используя Spring (3.2.x) AnnotationConfigWebApplicationContext на основе Spring Справочник по ресурсам:
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 */
}
}
}