IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Pb encodage des caractères.


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut Pb encodage des caractères.
    J'en ai marre de chercher pendant des heures alors je vais présenter mon pb.

    J'ai une appli J2EE avec apache et struts.

    Mon serveur est configuré en UTF-8.

    Les accents dans les données de formulaires ne passe pas côté serveur.
    Que mes JSP soient en UTF-8 ou ISO-8859-1/15 et que je mette :

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-15;">
    ou
    <meta http-equiv="content-type" content="text/html; charset=UTF-8;">

    ne change rien au pb.

    Mon serveur étant en UTF-8 les Header indique au navigateur qu'il faut encoder en utf-8. Manque de bol dans mes JSP quand je fais un getParameter , les accents ne passe pas.

    J'ai tenté de manipuler les CharsetEncoder Java mais aucun résultat.

    Lorsque je force l'encodage sur firefox à ISO-8859-1/15 (l'un ou l'autre), les accents passent sans pb(pourtant le serveur est en UTF8, logique)

    On peut donc régler le pb en passant le serveur en ISO-8859-1/15(j'ai testé ça marche nickel) sauf que
    le serveur de prod doit rester en UTF-8, je ne peux donc pas utiliser cette solution.
    A priori il n'y a pas besoin de changer l'ecnodage de windows car quand on change l'encodage du serveur ça marche.

    J'ai aussi testé cela en début de page JSP:

    response.setHeader("Content-Type","text/html;charset=ISO-8859-15");
    response.setContentType ("text/html;charset=ISO-8859-15");

    Le serveur semble passer totalement outre et continu à envoyer UTF-8 dans le header -> ces fonctions ne servent donc à rien???

    Bien sur j'ai testé avec de l'UTF-8 partout (dans JSP, dans les meta sur le serveur, les éditeurs aussi et en encodage par défaut de firefox), cela ne marche pas... l'utf-8 encode pas les accents?????

    J'avoue ne plus comprendre ce qui se passe.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    C'est un problème fréquent, rassure toi

    Voici une solution :

    Tu créés un filtre comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    package nom.du.package;
     
    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
     
    public class FiltreUTF8 implements Filter
    {
     
        public void init(FilterConfig filterConfig) throws ServletException {}
     
        public void destroy() {}
     
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
            request.setCharacterEncoding("UTF-8");
     
            try
            {
                chain.doFilter(request, response);
            }
            catch (Throwable t)
            {
                // ce que tu veux ici...
            }
        }
    }
    et tu le références dans le web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <web-app>
     <display-name>TonAppliWeb</display-name>
     
     <filter>
      <filter-name>FiltreUTF8</filter-name>
      <filter-class>nom.du.package.FiltreUTF8</filter-class>
     </filter>
     <filter-mapping>
      <filter-name>FiltreUTF8</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>
    ...
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut
    Merci de ta réponse mais cela n'a pas l'air de fonctionner.

    Même après le doFilter si je regarde dans mon request j'ai toujours "é" à la place de "é".
    Je précise que tout est en utf-8, firefox encode en utf-8.

    C'est curieux pourtant ta solution est propre et en cherchant je l'ai trouvé sur d'autres sites ça à l'air de marcher normalement, mais pas chez moi .

    Je ne vois pas pourquoi ça marche pas.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Au cas où tu ne l'avais pas déjà fait, il faut également mettre ceci dans les pages
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Début de page JSP...
     
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"  %>
     
    // Partie HEAD
    <META http-equiv="content-type" content="text/html; charset=UTF-8" />
    Personnellement, j'utilise Tiles avec Struts, du coup, je le ne mets que dans la page modèle...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 40
    Par défaut
    J'avais mis ces instructions là depuis longtemps.

    Je fais d'autres tests...

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Curieux

    Peux-tu mettre le code source de la page ?

    Quand tu dis "Même après le doFilter si je regarde dans mon request j'ai toujours é à la place de é.",
    tu le regardes où et comment au juste ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [MySQL] Encodage des caractères sous php4 lors de reception
    Par UN|X` dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/04/2007, 15h50
  2. [mysql]encodage des caractères
    Par ideal23 dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/10/2006, 13h16
  3. Probleme d'encodage des caractères spéciaux
    Par pacoulitou24 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 20/06/2006, 16h47
  4. Réponses: 15
    Dernier message: 24/02/2006, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo