Encodage des flux en J2EE

Si il y a bien un problème récurant en développement, c’est celui de l’encodage des caractères. On attend avec impatience le support de l’unicode avec PHP 6.… En J2EE, il n’y à pas le choix, il faut coder des filtre, à moins que je sois passé à côté de la solution miracle.

Une solution avec un filtre de servlet fourni par Seb qui fonctionne pour n’importe quel encodage:

1°) Il faut écrire un filtre de servlet qui va réencoder le flux avant envoi au client :

import java.io.IOException;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

public class EncodingFilter implements javax.servlet.Filter {

private String encoding;

public void init(FilterConfig filterConfig) throws ServletException {

this.encoding = filterConfig.getInitParameter("encoding");

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,  ServletException {

request.setCharacterEncoding(encoding);

filterChain.doFilter(request, response);

}

public void destroy() {

}

}

2°) Il faut ensuite faire appel à ce filtre par l’intérmediaire d’un mapping dans le fichier web.xml comme suit :

<filter> <filter-name>Encoding Filter</filter-name>

<filter-class>EncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>Encoding Filter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

Maintenant toutes les requêtes sont correctements lues avec l’encodage UTF-8.
Le filtre fonctionne tout autre encodage.

Une autre solution consiste à utiliser le servlet filter CharacterEncodingFilter dans le fichier web.xml afin de forcer l’encodage. Il est important de mettre ce filtre en premier dans la liste.

<web-app><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>

</web-app>

Voilà tout ! Pour ma part, j’ai utilisé la première solution qui à résolu pas mal de mes soucis au niveau des formulaires de saisies d’informations.

2 commentaires On Encodage des flux en J2EE

  • Bonjour,

    J’ai encore des soucis avec l UTF8,
    j arrive a inserer en Base correctement.
    Mes tests unitaires (JUnit) passent correctement et les données sont bien en UTF8
    MAIS JE N ARRIVE PAS A AFFICHER CORRECTMEENT SUR MA JSP.
    pour info j utilise Spring MVC, Hibernate.

    As tu une idée?

    PS:j ai mis les filtres … mais rien a faire.

  • As-tu converti ta base en UTF-8 ? Est-tu sûr que ton filtre fonctionne ? Regarde dans tes fichiers de conf xml où tu as mis ton filtre… au pire, poste ton fichier de conf en commentaire.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.