1

The problem: I would like to set the encoding to UTF-8. Still, I have Content-Type text/html;charset=ISO-8859-1 How can I do this? I followed the accepted answer in this question: How to get UTF-8 working in Java webapps?

Using:

  • FreeMarker

  • Spring 5.0.2

  • Ubuntu Linux 17.04

  • Tomcat 8.5

  • Java 9

In server.xml Connector object: URIEncoding="UTF-8"

Inside HTML header: <meta charset="UTF-8" /> or <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />

Inside a class that implements WebMvcConfigurer:

@Bean
public FreeMarkerViewResolver freemarkerViewResolver()
{
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();

    resolver.setCache(true);
    resolver.setSuffix(".ftl");
    resolver.setContentType("text/html;charset=UTF-8");

    return resolver;
}

Also:

FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setDefaultEncoding("UTF-8");

Using filter:

public class CharsetFilter implements Filter
{

    private String encoding;

    public void init(FilterConfig config) throws ServletException
    {
        encoding = config.getInitParameter("requestEncoding");

        if (encoding == null)
        {
            encoding = "UTF-8";
        }
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain next) throws IOException, ServletException
    {
        if (null == request.getCharacterEncoding())
        {
            request.setCharacterEncoding(encoding);
        }

        response.setContentType("text/html; charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

        next.doFilter(request, response);
    }
}

Inside 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>
Gábor DANI
  • 2,063
  • 2
  • 22
  • 40

0 Answers0