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

Java Discussion :

Caractère URL encodé


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Par défaut Caractère URL encodé
    Bonjour,

    dans le cadre d'une reprise d'existant, je suis confronté à des problèmes d'encoding de caractères...

    Mon contexte:
    • Dans une JSP, j'ai un formulaire de recherche avec un champ mot-clé
    • Lorsque l'utilisateur clique sur "rechercher", il y a un form.submit
    • Lorsque la page se rafraichi, le formulaire doit ré afficher les critères de l'utilisateur, dont le mot-clé


    Mon problème:
    • Si le mot-clé saisi contient un accent, la chaine ré affichée ne correspond pas à la saisie: "é" devient "é"


    Mon analyse:
    • Il semble que le moteur de traitement de la recherche effectue une transformation sur la chaine de recherche
    • Je pense que cette chaine est URLEncodée


    Ce que j'ai du mal a comprendre, c'est que :
    Dans ma JSP, je fais de jolis(!!) System.out.println qui me donnent les résultats suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    java.net.URLDecoder.decode(%C3%A9, UTF-8)= é
    java.net.URLDecoder.decode(%E9, ISO-8859-1)= é
    ...qui me semblent plutôt bizarre, donc je me fais une petite classe java dans Eclipse qui fait la même chose et le résultat est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    java.net.URLDecoder.decode(%C3%A9, UTF-8)= é
    java.net.URLDecoder.decode(%E9, ISO-8859-1)= é
    ...qui me semble bien plus raisonnable.

    J'ai donc l'impression d'avoir plusieurs problèmes à résoudre, mais ce dernier point de decoding de caractères, là, je ne comprends vraiment pas... Quelqu'un saurait-il m'éclairer ?

    Olivier

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ben du coup, là le problème n'a pas l'air de venir de ton décodage de l'URL, mais bien de l'encodage de la page web elle-même.
    Il y a d'autres accents, ailleurs dans cette page ? Ils marchent ? Comment sont-ils générés ?

    Ce qu'il faut comprendre, c'est que le URLDecoder.decode(), c'est le même dans les classes Java normales et dans les JSP. Son résultat dépend uniquement des deux paramètres, l'URL et le charset avec lequel décoder cette URL. S'ils sont identiques, le résultat sera identique, quel que soit l'endroit où on l'appelle.

    Il semble que cette JSP soit configurée pour produire du UTF-8, mais que le header content-type, ou le meta content-type, indiquent qu'elle est en ISO-8859-1. Normalement ça a pour effet de casser tous les accents (et tout ce qui n'est pas ASCII.)

    Concernant le fait que le System.out.println() ne donne pas la même chose dans les deux cas, attention, ça ça dépend de l'environnement. Si l'environnement utilise UTF-8 par défaut quand tu exécutes des JSP en J2EE, qu'il utilise ISO-8859-1 quand tu démarres ton programme sans JSP, et que dans les deux cas tu ouvres le résultat avec le même éditeur de texte, configuré pour ouvrir en ISO-8859-1...
    Ben ça donne exactement ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Par défaut
    Ok, merci de ton aide.

    En fait, je suis un boulet (ce que beaucoup de développeurs doivent régulièrement se dire, non?): en ce qui concerne mon System.out.println(), le problème vient de la sortie. L'une (celle de ma JSP) ne tolère que de l'ASCII, l'autre (la console Eclipse) sait afficher de l'iso-8859-1...

    Pour en revenir à mon pb principal, tu as raison dans ton analyse: j'ai une JSP destinée à produire de l'UTF-8 mais le meta content-type est ISO-8859-1. Donc mon analyse (pb d'URLDecode) est fausse. En fait mon pb vient du fait que je soumet ce formulaire ISO-8859-1 dans un "environnement" UTF8.
    J'ai trouvé une solution qui fonctionne bien, c'est d'ajouter le accept-charset="ISO-8859-1" dans mon tag form... Seulement seul Firefox le prends en compte, IE s'en fiche, et mon client est bien sûr en environnement IE...

    Je clos le thread car hors sujet, encore merci à toi thelvin

    Olivier

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

Discussions similaires

  1. paramétrage d'url encoding sous IIS V6.0
    Par jmclej dans le forum IIS
    Réponses: 1
    Dernier message: 25/02/2010, 14h26
  2. [Prototype] [XML] Caractères spéciaux encodés en \303\xyz ou \317\xyz
    Par nicorama dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 27/05/2008, 16h27
  3. Convertion Caractères URL
    Par papawemba dans le forum C#
    Réponses: 1
    Dernier message: 27/06/2007, 13h53
  4. [URL] Encoder une URL (requete Http)
    Par webspeak dans le forum Général Java
    Réponses: 14
    Dernier message: 29/03/2006, 10h47
  5. URL encode ?
    Par Ludo_xml dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 07/09/2005, 17h44

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