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

  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

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Par défaut
    Ulysse, tu as vidé le cache de ton navigateur ?

  8. #8
    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'ai un formulaire HTML qui passe les paramètres en GET.

    Je récupère normale dans ma JSP je l'affiche à la fois dans la console et
    sur la page web.

    J'utilise le code que tu m'a donné et j'ai vérifié qu'il passait bien dedans avec le débuggeur.

    Je fais un dernier test car je viens d'avoir une petite idée.

  9. #9
    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
    Attention de ne pas accéder au "request" avant l'instruction setCharacterEncoding !

    Le problème de cette instruction c'est qu'elle doit être la première...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    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
    ba a priori non le filtre est exécuté avant la page JSP non?

    Sinon j'ai aussi effacé le cache du navigateur.

  11. #11
    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
    Bon ça y est ça marche enfin.

    J'ai passé le formulaire en POST au lieu de GET.
    C'est normal qu'en GET cela ne marche pas?

    Merci beaucoup de votre aide en tout cas, cela m'a permis de mettre une méthode propre qui marche sur toute les pages. Je sais maintenant qu'il faut absolument du POST dans tous les formulaires.

    Je suis prévenu maintenant! Je ne me ferais plus avoir de nouveau.

  12. #12
    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 bon à savoir... je n'utilise jamais le GET sur un formulaire... et maintenant, j'aurais une bonne raison de ne pas commencer

    Une petite recherche sur le net m'a ramenée ça
    • If the method is "get" - -, the user agent takes the value of action, appends a ? to it, then appends the form data set, encoded using the application/x-www-form-urlencoded content type. The user agent then traverses the link to this URI. In this scenario, form data are restricted to ASCII codes.
    • If the method is "post" --, the user agent conducts an HTTP post transaction using the value of the action attribute and a message created according to the content type specified by the enctype attribute.
    (http://www.cs.tut.fi/~jkorpela/forms/methods.html pour le tout...)

    C'est donc normal que tu es eu des problèmes...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    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
    Ok bon les choses "redeviennent" donc logique c'est rassurant .

    Perso, je n'utilise jamais le GET non plus sauf que là on m'a demandé de corriger le pb des accents sur un formulaire déjà existant.

  14. #14
    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
    Ah la maintenance... ou comment perdre du temps sur un petit problème...

    C'est clair qu'on ne pense pas à ce genre de détail
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 98
    Par défaut
    Bonjour

    Super discussion, elle m'a permis de corriger mon problème d'encodage. Merci à vous tous

    Cordialement

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