Encodage des flux en J2EE

Tags , ,
19 décembre 2007 par Yohann CIURLIK

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 :

  1. import java.io.IOException;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;
  2.  
  3. import javax.servlet.ServletResponse;
  4.  
  5. public class EncodingFilter implements javax.servlet.Filter {
  6.  
  7. private String encoding;
  8.  
  9. public void init(FilterConfig filterConfig) throws ServletException {
  10.  
  11. this.encoding = filterConfig.getInitParameter("encoding");
  12.  
  13. }
  14.  
  15. public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,  ServletException {
  16.  
  17. request.setCharacterEncoding(encoding);
  18.  
  19. filterChain.doFilter(request, response);
  20.  
  21. }
  22.  
  23. public void destroy() {
  24.  
  25. }
  26.  
  27. }

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

  1. <filter> <filter-name>Encoding Filter</filter-name>
  2.  
  3. <filter-class>EncodingFilter</filter-class>
  4.  
  5. <init-param>
  6.  
  7. <param-name>encoding</param-name>
  8.  
  9. <param-value>UTF-8</param-value>
  10.  
  11. </init-param>
  12.  
  13. </filter>
  14.  
  15. <filter-mapping>
  16.  
  17. <filter-name>Encoding Filter</filter-name>
  18.  
  19. <url-pattern>/*</url-pattern>
  20.  
  21. </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.

  1. <web-app><filter>
  2.  
  3. <filter-name>encodingFilter</filter-name>
  4.  
  5. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  6.  
  7. <init-param>
  8.  
  9. <param-name>encoding</param-name>
  10.  
  11. <param-value>UTF-8</param-value>
  12.  
  13. </init-param>
  14.  
  15. <init-param>
  16.  
  17. <param-name>forceEncoding</param-name>
  18.  
  19. <param-value>true</param-value>
  20.  
  21. </init-param>
  22.  
  23. </filter>
  24.  
  25. </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.

  • Digg
  • del.icio.us
  • Blogasty
  • blogmarks
  • BlogMemes Fr
  • Bluegger
  • Furl
  • MisterWong Fr
  • MSN-Reporter
  • Netscape
  • NewsVine
  • Nuouz
  • Scoopeo
  • StumbleUpon
  • Tapemoi
  • Technorati
  • Wikio
  • YahooMyWeb
  • Zataz
  • Reddit France
  • Tutmarks
Cet article vous a plu ? Abonnez-vous au blog par mail ou flux RSS : vous recevrez automatiquement les nouveaux billets !
Articles en relation :
Ajouter votre commentaire

2 commentaires pour ce post

  1. JuJuZ dit:

    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.

  2. Yohann CIURLIK dit:

    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.

Laissez un commentaire



sideBarQA