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 !)
Et j'obtiens comme résultat :
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) { } }
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.
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
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
Partager