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 :

[Encodage] Souci de getParameter dans une request


Sujet :

Servlets/JSP Java

  1. #1
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut [Encodage] Souci de getParameter dans une request
    Bonjour à tous.

    J'ai un problème qui m'échappe . C'est pourquoi je fais appel à votre aide, sinon je risque de me taper la tête contre les murs tellement ce problème me paraît mystique...

    Le contexte :

    • appli qui tourne sous websphere 5.0
    • réception d'une requête du genre "xxx?name=yyyy"
    • le getCharacterEncoding() renvoie UTF-8


    Jusque-là, tout va bien. Mon problème (mystique ?!?) :

    • avec un exemple du type "xxx?name=jean-pierre", le request.getParameter("name") me renvoie mon résultat nickel "jean-pierre"
    • avec un exemple du type "xxx?name=jip%E9p%E9", le request.getParameter("name") me renvoie un résultat tronqué "jip"


    Du coup, vu que je ne trouve pas la solution, je suis contraint d'utiliser une solution infecte ! (un StringTokenizer sur ma queryString puis URLDecoder.decode sur tous mes tokens ).

    Quelqu'un a-t-il déjà vu ça ? Ou sont-ce mes yeux, qui, à force de tourner en rond, ne voient même pas l'erreur ?

    Merci à vous !

  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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Ta servlet étend HttpServlet ou une classe perso ?
    Utilises-tu la méthode doPost, doGet ou service ?
    Fais-tu un setCharacterEncoding(...) ?

    A+

  3. #3
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Il s'agit d'une classe perso (framework "maison" de la boîte où je suis en ce moment).

    En entrée de ma méthode j'ai un objet HttpServletRequest. Et ma requête arrive via la méthode get (les params sont passés dans l'url depuis une autre appli en C#).

    Pour le setCharacterEncoding, actuellement je ne le fais pas mais j'avais déjà testé cette possibilité et cela ne changeait rien).

    A+

  4. #4
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    C'est bon, j'ai résolu mon problème

    En réalité, pas vraiment... En passant par le débogueur, j'ai vu que mon serveur was transformait mes objets natifs javax ServletRequest en des objets IBM SRTServletRequest.

    Et IBM, dans leur méthode parseQueryString qui alimente la hastable de parameters, ils ont écrit en dur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // s1 token de la requête à parser
    if(!s1.equals("ISO-8859-1") && s1.indexOf("8859_1") == -1)
    {
       try
       {
          s3 = new String(s3.getBytes("ISO-8859-1"), s1);
    ...
    Donc, en résumé, étant donné que mon appli qui tourne en UTF-8, et que IBM me parse mes paramètres en ISO, eh bien je suis obligé d'utiliser la méthode pas belle que j'ai citée plus haut

    Merci IBM

  5. #5
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Alors je tiens à faire mon mea culpa

    En effet, trouvant surprenant le fait qu'il y ait un bug dans le code WAS sur un point aussi important et surtout évident, j'ai décidé d'en toucher deux mots à un expert WAS de ma boîte... qui m'a affirmé la chose suivante : "ta requête n'est pas en UTF-8 !!!

    En effet, mon exemple concernait le cas du 'é' :
    • %E9 est le code ISO-8859-1
    • le code UTF-8 est %C3%A9


    Mon appli étant en UTF-8, elle tentait de décoder %E9 qui est tout simplement inconnu dans ce codage ! L'erreur venait donc de mes collègues qui m'envoyaient une requête erronée.

    Moralité : oui oui, c'était bien "mes yeux" . De plus, il vaut mieux parfois faire confiance à IBM plutôt qu'à ses collègues

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] Souci de syntaxe dans une classe
    Par diblasio dans le forum Langage
    Réponses: 2
    Dernier message: 17/09/2011, 15h27
  2. Souci avec result dans une fonction
    Par eLKa. dans le forum Pascal
    Réponses: 2
    Dernier message: 08/12/2008, 05h27
  3. Encodage d'un paramètre dans une variable
    Par Baillot Philippe dans le forum C
    Réponses: 4
    Dernier message: 21/10/2007, 18h27
  4. [MySQL] Recherche dans une base de donnée [ Gros soucis ]
    Par milkasoprano dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/03/2006, 18h59
  5. [MySQL] Soucis avec une insertion dans une base
    Par Ludo75 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 27/01/2006, 15h03

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