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 avec la servlet sur Linux


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 71
    Points : 38
    Points
    38
    Par défaut problème d'encodage avec la servlet sur Linux
    Salut,
    J'ai développé une application web (apache-tomcat+eclipse+mysql) et tout va bien pour les caractères spéciaux (affichage+lecture+enregistrement dans la base) sur windows XP.
    Lorsque j'ai installé un apache-tomcat sur un serveur Linux, j'ai rencontré un problème avec ces caractères; l'affichage marche très bien mais si je veus enregistrer une donnée qui contient un ou plusieurs caractères spéciaux dans la base et la reafficher, des caractère bizarre sont affichés.
    J'ai effectué les tests suivants:

    1- si j'enregistre des données contenant des caractères spéciaux manuellement dans la base; elles sont bien affichées sans problèmes; donc mysql n'a rien à voir avec ce problème.

    2- J'ai testé avec le mot "évènement" dans ma page jsp, j'ai affiché ce mot dans la servlet qui enregistre dans la base et j'ai obtenu le mot suivant : "évènement" et par conséquent il est enregistré comme ça dans la base.

    Donc le problème provient de la lecture des données à partir des pages jsp dans la servlet.
    j'ai affiché dans la servlet le request.getCharacterEncoding=UTF-8 et toutes mes pages sont codées en UTF-8 en ajoutant :
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    dans chaque page.
    quelqu'un a une idée sur ce sujet?
    Merci et je suis prêt si vous avez des questions

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Bonjour

    Je suis aussi sur un serveur linux et n'ai pas ce pb.
    teste en entête de jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    et dans tes pages dans la head
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par ja1985va Voir le message
    j'ai affiché dans la servlet le request.getCharacterEncoding=UTF-8 et toutes mes pages sont codées en UTF-8 en ajoutant :
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> dans chaque page.
    quelqu'un a une idée sur ce sujet?
    Merci et je suis prêt si vous avez des questions
    Avez vous bien mis accept-charset="UTF-8".

    Si vous affichez valeurRecue.length depuis votre JSP/SErvlet avant de transférer cette donnée vers la base, la valeur est correcte?

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Une autre piste consiste à mettre en première opération de la servlet un
    request.setCharacterEncoding("UTF-8");
    Après ça, tout devrait être bon.

    Un test à faire sur la page d'appel si tu as Firefox :

    click droit -> Informations sur la page

    et regarde si ta page est bien en UTF-8
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    merci pour vos réponses,
    @Tchize
    j'ai ajouté accept-charset="UTF-8" mais rien de nouveau.
    le mot affiché dans la servlet n'est pas celui introduit dans la page jsp; le é, par exemple, est remplacé par é.
    @OButterlin
    j'ai verifié avec firefox et ma page est bien codée en UTF-8
    pour request.setCharacterEncoding("UTF-8"), je pense que c inutile car j'ai affiché le request.getCharacterEncoding et ça donne UTF-8
    @Mengué georges
    je vais essayé avec une page jsp

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    Je pense que l'erreur provient du système Linux parce que j'ai placé le .war sous webapps de apache-tomcat sous windows et j'ai pas de problème (avant je lance le projet à partir d'eclipse).

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par ja1985va Voir le message
    le mot affiché dans la servlet n'est pas celui introduit dans la page jsp; le é, par exemple, est remplacé par é.
    C'et n'est pas le mot mais sa longueur telle que le vois java que j'ai demandé. Quand vous affichez et que ça déconne, on ne peux jamais savoir si ca a déconné à la lecture de la requete, à l'écriture sur la DB, à la lecture de la DB, à l'écriture de la page finale. D'ou l'intérête d'afficher le length à chaque étape. Pour un "é", quand ca passe de 1 à 2, c'est que entre 1 et 2 se situe l'erreur Donc si lors du décode de la requete, vous avez bien 1, la requete n'est pas en cause, si avant de stocker dans la DB, vous avez un et qu'en lisant la DB après vous avez 1, la db n'est pas en cause, etc

    Et linux n'est pas en cause, mais bien un truc dans votre chaine qui utilise "l'encodage par défaut de la plateforme", cet encodage par défaut étant différent sous win et sous linux.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    ok tchize, ca a déconné à la lecture de la requete (de la page jsp), moi j'affiche le mot avant de l'enregistrer dans la base dans la servlet.
    en tout cas j'ai testé avec le mot "évènement" dans la page, j'ai eu le mot suivant dans la servlet (lecture de la requete) "évènement" avec un longueur = 11 et j'ai affiché la longueur en utilisant mot.length().

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ce qui m'épatte, c'est que ca déconne deux fois. Un fois, comme si l'utf-8 était lu comme de l'iso (passage de 9 à 11 lettres) et une deuxième fois à l'affichage, comme si le serveur l'encodait en utf-8 et que le client web le lisait en iso-8859-1.

    Pour commencer, afin d'éviter les ennuis, pourrais-tu aller dans la config de tomcat pour fixer à utf-8 le charset par défaut. Parce qu'il est pas impossible qu'on aie forcé le charset à UTF-8 après avoir décodé là requete.

    aussi, c'est du POST ou du GET (c'est important, en fait)?

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    D'après l'exemple (évènement), on est à 13 octets, ce qui ne colle pas avec de l'UTF-8 (standard)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    J'ai ajouté les deux attributs suivants dans la balise <connector> dans le fichier server.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    URIEncoding="UTF-8"
                   useBodyEncodingForURI="true"
    mais j'ai toujours le même problème

  12. #12
    Membre actif Avatar de Jacobian
    Inscrit en
    Février 2008
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 425
    Points : 245
    Points
    245
    Par défaut
    il faut redeployer l'enssemble de tes fichiers en changant l'encodage dans eclipse fichier--> click droit properties ...

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/02/2007, 14h19
  2. Problème d'encodage avec MyODBC
    Par stack dans le forum Access
    Réponses: 2
    Dernier message: 17/10/2006, 12h11
  3. [Mail] Problème d'encodage avec phpmailer
    Par catmary dans le forum Langage
    Réponses: 8
    Dernier message: 29/06/2006, 10h56
  4. Problème d'encodage avec Python
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 22/02/2006, 14h36
  5. probleme avec jbuilder 2005 sur linux
    Par foussil dans le forum JBuilder
    Réponses: 1
    Dernier message: 28/12/2005, 13h37

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