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:
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:
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