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

Langage Java Discussion :

java URLDecoder et reparsing String


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 16
    Par défaut java URLDecoder et reparsing String
    Bonjour,

    Voilà, je parse des logs et recois parfois des incohérences, comme un % entamant un caractère Unicode (au lieu de \).
    J'essaie donc de remplacer le % par \ mais le URLDecoder ne fonctionne pas - visiblement - sur un .replace !

    Mon code (pas propre mais c'est pour du test !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        String text     = "fabricant%20housse%20poly%u00e9thyl%u00e8ne";
    //    String text     = "fabricant%20housse%20poly\u00e9thyl\u00e8ne";
        try {
          String keyword  = java.net.URLDecoder.decode(text, "UTF-8");
          System.out.println("kw décodé step 1 : " + keyword);
        } catch (Exception e) {
          System.out.println("Exception, on continue en remplaçant les %");
          try {
            String keyword = java.net.URLDecoder.decode(text.replace("%u00", "\\u00"), "UTF-8");
            System.out.println("kw décodé step 2 : " + keyword);
          } catch (Exception e1) {
          }
        }
    Et j'obtiens comme résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception, on continue en remplaçant les %
    kw décodé step 2 : fabricant housse poly\u00e9thyl\u00e8ne
    J'ai laissé volontairement le text en commentaire car si au lieu d'utiliser celui mal encodé j'utilise celui qui est en commentaires (donc directement au bon format), ça fonctionne correctement ! Je n'arrive pas à comprendre.

    En d'autres termes et pour tenter de simplifier :
    decode("\u00e9") me donne bien "fabricant housse poly\u00e9thyl\u00e8ne"
    decode( "%u00e9" en remplacant le % par \ ) me donne "fabricant housse poly\u00e9thyl\u00e8ne"

    Je crois comprendre qu'une fois le replace fait, Java ne considère plus les \ comme des caractères de contrôles, mais je nage un peu !

    Merci

    --
    Laurent

  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
    Citation Envoyé par lolo92 Voir le message
    Voilà, je parse des logs et recois parfois des incohérences, comme un % entamant un caractère Unicode (au lieu de \).
    C'est la manière correcte de le faire dans une URL.

    Ce n'est pas java qui a inventé les URLs, ce n'est pas Java qui décide comment on les écrit.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 16
    Par défaut
    hmm, pour moi la manière correcte c'est effectivement un % mais avec de l'urlencoding derrière (où effectivement un %20 donne un espace, par exemple).

    Ceci dit, en l'occurrence c'est une erreur que j'ai : un "é" doit être encodé normalement en %C3%A9.
    Il se trouve que dans certains cas j'ai ce "é" en unicode, i.e. \U00E9, ce qui est également correct (moins, mais correct quand même )

    Ici c'est un mix des 2 => j'ai %u00e9 !


    Bref, en tout cas mon URLDecoder ne fonctionne pas avec la fonction replace

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 16
    Par défaut [RESOLU]
    Bon je me réponds à moi-même, merci à Nicolas qui m'a bien aidé sur ce coup-là

    Voici donc une fonction qui ré-unicode des caractères mal unicodés !
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    String unicodify (String input)
       {
           StringBuffer output = new StringBuffer();
           try {
               int i, start=0, offset=0;
               java.util.regex.Pattern p = java.util.regex.Pattern.compile ("%u[a-fA-F0-9]{4}");
               java.util.regex.Matcher m = p.matcher (input);
     
               while (m.find()) {
                   start = m.start ();
                   i = Character.digit (input.charAt(start+2), 16) << 12;
                   i |= Character.digit (input.charAt(start+3), 16) << 8;
                   i |= Character.digit (input.charAt(start+4), 16) << 4;
                   i |= Character.digit (input.charAt(start+5), 16);
     
                   output.append (input.substring (offset, start) + (char)i);
                   offset = start + 6;
               }
               output.append (input.substring (offset));
               return new String (output);
     
           } catch (Exception e) {
               e.printStackTrace();
           }
           return input;
       }

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/03/2011, 14h09
  2. [JAVA] mystere de conversion string - byte[ ]
    Par thotoss dans le forum Langage
    Réponses: 3
    Dernier message: 11/03/2010, 10h22
  3. [Java 5] Enum et String
    Par ebaynaud dans le forum Langage
    Réponses: 8
    Dernier message: 10/01/2008, 17h09
  4. Réponses: 2
    Dernier message: 08/12/2007, 19h51
  5. Réponses: 9
    Dernier message: 10/05/2007, 17h57

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