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 :

Problème d'encodage JSP


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier Avatar de dedeloux
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 104
    Points : 75
    Points
    75
    Par défaut Problème d'encodage JSP
    Bonjour à tous,

    Je sais que l'encodage est un problème récurrent en java mais je n'ai pas trouvé de solution pour résoudre mon problème dans le forum.

    Je bosse avec des pages JSP dans lesquelles j'ai la balise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    Je travaille également avec Spring 2.5, Hibernate 3 et une base Oracle 9i.
    Mon souci est donc que je n'arrive pas à afficher correctement les caractères accentués dans mes pages JSP.

    Quand j'écris un caractère accentué dans ma page et que je l'enregistre dans ma base, j'obtiens un caractère bizarre Par contre, si j'ajoute directement des caractères accentués dans ma base, ils sont correctements écrits. Ce qui me laisserait penser que l'encodage de ma base est correct. Mais si c'est le cas, je ne vois pas ce que je dois rajouter pour que les caractères soient correctement pris en compte en java.

    Est ce que quelqu'un pourrait m'aider à résoudre ce mystère s'il vous plaît ?

    Merci par avance.
    Audrey.

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Jette un oeil à cette discussion.
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Membre régulier Avatar de dedeloux
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 104
    Points : 75
    Points
    75
    Par défaut
    Merci de ta réponse c_nvy.

    En fait, j'avais déjà jeté un oeil à la FAQ hier, et j'avais vu cette solution que j'avais testé mais sans succès.

    Pas plus de succès aujourd'hui

    Comment est-ce que je peux savoir dans quel charset est encodée une chaîne de caractères ?

    Sinon, quelqu'un a t-il une autre idée ?

  4. #4
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Tu mets des caractères accentués dans ta jsp, avec un encodage UTF-8. A la sauvegarde, ils doivent être encodés correctement. Sous eclipse, assure-toi que le text file encoding de ton fichier est bien UTF-8 et pas l'encodage par défaut.

    Autre piste, Spring fourni un listener pour l'encodage. A placer dans 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
     
    <filter>
    		<filter-name>Spring Character Encoding Filter</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>

  5. #5
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Si sa marche toujours pas reste cette solution
    lorsque tu valides ton formulaire et avant l'enregistrement en base.

    lorsque tu recupères les données request.getPameter("");
    et que tu les traites avant insertion en base.

    rajoute toi des petits Sysout voir si tu as deja perdu les caractères et savoir quel encodage leur a été appliqué
    si utf-8 tu auras: è - > \u00e8 , é -> \u00e9

    Et ensuite utilisé URLEncode,URLDecode afin de récupérer les données correcte et de les s'inserrées.

  6. #6
    Membre régulier Avatar de dedeloux
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 104
    Points : 75
    Points
    75
    Par défaut
    Bonjour Tommy31, merci pour ta réponse.

    J'ai bien vérifié que l'encodage de mes pages était UTF-8 dans Eclipse. Pas de souci de ce côté là.

    J'ai ajouté le filtre que tu m'a montré dans le web.xml et toujours pas de changements, les accents ne s'affichent pas correctement parce qu'ils ne sont pas enregistré correctement dans ma base de données.

    Est ce qu'il y a d'autre choses que je dois ajouter ?

  7. #7
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Citation Envoyé par dedeloux Voir le message
    Bonjour Tommy31, merci pour ta réponse.

    J'ai bien vérifié que l'encodage de mes pages était UTF-8 dans Eclipse. Pas de souci de ce côté là.

    J'ai ajouté le filtre que tu m'a montré dans le web.xml et toujours pas de changements, les accents ne s'affichent pas correctement parce qu'ils ne sont pas enregistré correctement dans ma base de données.
    Je comprend plus là ^^

    les données qui te pose problème se situe a quel niveau ?

    tu récupère des donnes de ta abse et losque tu les affichés les accents sautent car il ne sont pas présent en base de données.

    Ou se sont des données que tu as saisie dans ta jsp et qu'après validation et traitement du formulaire associé les accents sont réencode et disparaisse à l'enregistrement ?

  8. #8
    Membre régulier Avatar de dedeloux
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 104
    Points : 75
    Points
    75
    Par défaut
    Ce sont des données que je saisis dans des formulaires JSP et que j'enregistre dans ma base de données.

    Lors de l'enregistrement, les accents sautent, ce qui fait que je retrouve avec des caractères bizarres dans ma base. Il doit avoir un truc qui cloche entre le submit et l'enregistrement.

    Par contre, je n'utilise pas de "request.getParamater" pour récupérer mes champs, je récupère directement mes objets (user, site, ...) que j'ai "bindés" dans le formulaire avec Spring.

  9. #9
    Membre régulier Avatar de dedeloux
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 104
    Points : 75
    Points
    75
    Par défaut
    J'ai testé ce que tu m'avais dit link256 et fait un sysout sur les données que je récupère avant l'enregistrement et elles ne sont déjà pas bien encodées.

    J'obtiens des caractères bizarres (du genre : ├á├®├¿) partout ou j'ai mis des accents.

    Pourtant, j'ai bien précisé l'encodage dans ma page. Qu'est ce que je dois faire en plus ?

  10. #10
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    J'ai pas encore eu l'occasion d'utilisé Spring
    mais de ce que j'avais vu, tu passes directement ton objet user par exemple et il va alle faire les enregistrements en bases ?

    tu n'as pas la possibilité de faire du traitement avant enregistrement en base et applique des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URLDecode.decode(user.getNom,"UTF-8")
    sur chaque propriétée de ton objet.

    je suis pas sûr de la syntaxe

  11. #11
    Membre régulier Avatar de dedeloux
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 104
    Points : 75
    Points
    75
    Par défaut
    J'ai essayé ce que tu me proposais link256 et je n'obtiens rien de mieux ...

    La syntaxe exacte est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URLDecoder.decode(user.getLastname(),"UTF-8")
    J'ai également essayé en encodant en UTF-8 et j'obtiens des %C23%...

    J'ai utilisé cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URLEncoder.encode(user.getLastname(),"UTF-8")
    Je ne sais pas comment me sortir de ce problème ... Pfff ! Tout ça pour des accents

  12. #12
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    J'ai pas tout saisi. Corrige-moi si je me trompe.

    Tu as un formulaire dans lequel tu saisis du texte avec accent, celui-ci est acheminé côté serveur et stocké en base. Le texte reçu coté serveur n'a pas le bon encodage.

    Si c'est bien celà. Je souhaiterais savoir le mécanisme que tu utilise pour invoquer le service côté serveur. Si c'est un post/get classique, tu peux scanner l'url transmise et surtout la façon dont sont encodés les caractères. Tu peux t'aider du plugin firebug sous firefox pour cela.

    A tout hasard, là où tu as mis le sysout fait ceci avant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      Charset charset = Charset.forName("ISO-8859-1");
      String s = new String( text.getBytes(), charset );
      System.out.println(s);

  13. #13
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Citation Envoyé par dedeloux Voir le message
    J'obtiens des caractères bizarres (du genre : ├á├®├¿) partout ou j'ai mis des accents.

    Pourtant, j'ai bien précisé l'encodage dans ma page. Qu'est ce que je dois faire en plus ?
    Tu obtiens les memes caractère en base ?

    peux tu données le mot d'origine et celui que tu obtient pour trouver l'encode qui a été applique afin d'utilisé le bon decodeur ^^

  14. #14
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Allons plus loin dans la recherche du bon encodage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (Entry<String, Charset> charsetEntry : Charset.availableCharsets().entrySet()) {
     
                String text = new String(s.getBytes(), charsetEntry.getValue());
                System.out.println(charsetEntry.getKey() + ": " + text);
     
            }
    L'une des entrées affichées doit retranscrire sans faute le texte accentué.

  15. #15
    Membre régulier Avatar de dedeloux
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 104
    Points : 75
    Points
    75
    Par défaut
    Alors,

    J'envoie mes formulaires au serveur via un post. JE récupère mes informations avec Spring dans mon controlleur comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {
     
    		// Récupération de l'objet command initialisé avec les données du formulaire
    		WebVisitor webVisitor = (WebVisitor) command;
     
    			// Enregistrement du webVisitor dans la base de données
    			webVisitorService.saveWebVisitor(webVisitor);
     
     
    		// Renvoie vers la vue définie dans la déclaration du controlleur
    		return new ModelAndView(new RedirectView(getSuccessView()));
    	}
    Dans mon web.xml, j'ai laissé le filtre de Spring:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        <filter>
    		<filter-name>Spring Character Encoding Filter</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>
    J'ai utilisé firebug pour scanner mon URL et les paramètres passés au serveur comme tu me l'avais conseillé Tommy31.

    J'avais écrit dans mon champ "Last Name" ces caractères "éèà", j'obtiens dans ma requête ces caractères "éèÃ". Ce sont ces caractères qui sont écrits en base de données.

    Pour information, j'ai fait un test en repassant le charset à ISO-8859-1 et je n'ai aucun, souci avec les accents.

    En tout cas, c'est vraiment gentil de m'aider Tommy31 et link256

  16. #16
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Et si tu mets ca dans ton entête JSP, celle du formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%@ page language="java" pageEncoding="UTF-8"%>

  17. #17
    Membre régulier Avatar de dedeloux
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 104
    Points : 75
    Points
    75
    Par défaut
    Ca ne change rien ...
    J'avais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    J'ai mis ce que tu m'as dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page language="java" pageEncoding="UTF-8"%>
    Et j'ai même essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
    J'ai toujours le même problème.
    Une autre idée ? (je sais que j'en demande beaucoup là des idées !!!)

  18. #18
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    J'ai une dernière cartouche, mais je commence à m'épuiser :

    As-tu vérifié que l'encodage dans le navigateur était bien positionné à UTF-8 ? Si tel n'est pas le cas, le changer par le menu, puis re-soumettre le formulaire et voir si ca améliore les choses ?

  19. #19
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    on va voir si ta derniere cartouche était chargée à blanc ou non



    dedeloux avais tu essayé ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    URLEncoder.encode(user.getLastname(),"ISO-8859-1")

  20. #20
    Membre régulier Avatar de dedeloux
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 104
    Points : 75
    Points
    75
    Par défaut
    Alors le problème ne venait pas de l'encodage du navigateur

    Le souci venait du filtre Spring qui n'était pas appliqué sur la page ...

    Il a fallu que je modifie mon mapping pour le filtre j'ai maintenant ceci dans mon 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
    14
    15
    16
    17
    18
     
        <filter>
    		<filter-name>Spring Character Encoding Filter</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>
     
        <filter-mapping>
          <filter-name>Spring Character Encoding Filter</filter-name>
          <url-pattern>*.htm</url-pattern>
        </filter-mapping>
    Voilà. En tout cas, merci vraiment pour votre aide et votre patience.
    J'espère avoir l'occasion de vous aider aussi un jour

    Audrey.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème d'encodage JSP
    Par tonymx15 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/06/2012, 19h47
  2. JSP : Problème d'encodage dans un JSONObject
    Par barok59 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 27/08/2010, 16h00
  3. problème encodage JSP -> serveur :/
    Par -=mateo=- dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 14/01/2010, 15h53
  4. Problème d'encodage JSP/Servlet/MySQL
    Par AlexLEDE dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 28/05/2009, 16h13
  5. Problème d'encodage JBoss/MySQL/Jsp
    Par Beewiz dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 11/06/2007, 15h57

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