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

API standards et tierces Java Discussion :

(java.net.) URLEncoder / URLDecoder


Sujet :

API standards et tierces Java

  1. #1
    Invité
    Invité(e)
    Par défaut (java.net.) URLEncoder / URLDecoder
    Bonjour,

    J'ai quelques petits soucis avec les classes URLEncoder et URLDecoder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String encoded = URLEncoder.encode("économie", "UTF-8");
    System.out.println(encoded);
    System.out.println(URLDecoder.decode(encoded, "ISO-8859-1"));
    System.out.println(URLDecoder.decode(encoded, "UTF-8"));
    J'encode en UTF-8, puis je décode en ISO-8859-1, la cela m'affiché bien économie, enfin je décode en UTF-8 mais la pbl cela n'affiche rien (mais pas d'exception de levée)...

    Pas très logique tout ça, y'a un truc que j'ai loupé???

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu es sûr de toi ? Quand j'exécute ton code j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    %C3%A9conomie
    économie
    économie
    Ce qui me semble tout à fait normal !

    a++

  3. #3
    Invité
    Invité(e)
    Par défaut

    Dans le doute j'ai retesté, ça ne donnait pas le même affichage que le tien... toujours le même problème...

    J'ai creusé un peu et en fait je viens de m'apercevoir que par défaut dans Eclipse Console Encoding était en UTF-8, or si je change ça en ISO cela fonctionne bien...

    Pfiouf je capte pas vraiment cette histoire d'encodage, je vais continuer à creuser, merci bien!

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Punkachu Voir le message
    Dans le doute j'ai retesté, ça ne donnait pas le même affichage que le tien... toujours le même problème...
    Et tu obtiens quoi comme affichage ?

    a++

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'obtenais (en Console Encoding UTF-8)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    %C3%A9conomie
    économie
    �conomie
    Et encore cette dernière ligne (�conomie), je la vois même pas dans la console, c'est juste en copiant collant qu'elle apparaît lol

    bizarre bizarre

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Vérifie l'encodage par défaut de ton système :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(System.getProperty("file.encoding"));
    S'il est différent de l'encodage de la console d'eclipse alors ton problème vient de là !

    a++

  7. #7
    Invité
    Invité(e)
    Par défaut
    En effet,
    System.out.println(System.getProperty("file.encoding")); renvoie
    Cp1252!!!

    Merci pour ton aide

    ps: tu aurais de la doc sur l'encodage en java? je sens que j'ai pas fini avec toutes ces histoires d'encodage si je trouve pas de la doc sérieuse qui m'explique tout ça

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Par défaut Java utilise ce "file.encoding" pour encoder tout ce qui sort sur System.out.

    Donc ici le problème ne vient pas des classes URLEncoder/Decoder mais bien d'un problème de configuration.


    Même le code suivant ne devrait pas marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("économie");
    En interne les chaines sont toujours stocké en UTF-16.

    1. Lorsque tu fais le println(), la chaine est convertit en bytes encodé dans le charset de "file.encoding" (soit Cp1252 sous Windows).
    2. La console d'eclipse reçoit ces bytes et les interprète comme s'il s'agissait d'UTF-8 ce qui est faut et qui aboutis donc à un résultat incorrect.



    Il faut toujours utiliser le même encodage dans les deux bouts de la communication, donc soit tu passes ta console d'eclipse en cpc1252, soit tu modifies ton system.out pour qu'il utilise de l'UTF-8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.setOut(new PrintStream(System.out, true, "UTF-8"));

    A noter que l'on retrouve le même problème sous la console MS-Dos qui utilise un encodage particulier...



    En règle général les problèmes ne se situe pas au niveau de Java ou des APIs mais au niveau des "communications" avec l'extérieur (consoles, fichiers, base de données)... lorsque l'encodage n'est pas spécifié et qu'il peut donc être potentiellement différent...


    Pour vérifier qu'une chaine contient bien ce qu'on veut, on peut toujours utiliser un composant Swing qui l'affichera correctement, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JOptionPane.showMessageDialog(null, text);

    a++

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

Discussions similaires

  1. VB.Net UrlEncode et UrlDecode
    Par cat38 dans le forum VB.NET
    Réponses: 0
    Dernier message: 11/06/2010, 17h28
  2. le namespace java.net.URLEncoder n'existe pas
    Par Tristan Zwingelstein dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 16/04/2010, 10h42
  3. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  4. [Réseau]Interface Java + .net
    Par norwy dans le forum Général Java
    Réponses: 8
    Dernier message: 20/09/2005, 22h51
  5. [java.net][TCP] Rupture de connexion ? Détection ?
    Par sephile dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/01/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