Encodage des flux en J2EE

Par Yohann CIURLIK le 19 décembre 2007, 00:15

Si il y a bien un problème récurant en développement, c’est celui de l’ des caractères. On attend avec impatience le support de l’unicode avec PHP 6.… En , 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 .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.

Cet article vous a plu ? Abonnez-vous au blog par mail ou flux RSS : vous recevrez automatiquement les nouveaux billets !


2 Commentaires


1
JuJuZ14 avril 2008 à 15:57

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 CIURLIK14 avril 2008 à 19:32

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

Votre commentaire

inicio