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.