IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topicStart Poll

En ligne · [ Standard ] · Linéaire+

> [java] Urldecoder.decode(zob,"utf-8"), les allemands attaquent!

PoP
post 02/03/2004 16:20
Message #1


ragondin interstellaire
*****

Groupe : Membres
Messages : 3,059
Inscrit le : 16/05/2002 23:00
Lieu : DTC, au fond à gauche
Membre no. 8



J'ai le code suivant:
CODE

import java.net.URLDecoder;
   (...)
   HashMap paramtemp = new HashMap();
   Set paramNames = param.keySet();
   Iterator namesIt = paramNames.iterator();
  while (namesIt.hasNext()) {
     String paramName = (String)namesIt.next();
     String paramValue = (String)param.get(paramName);
     System.out.println("###### INPUT paramName" + paramName);
     System.out.println("###### INPUT paramValue" + paramValue);
     paramName = URLDecoder.decode(paramName, "UTF-8");
     paramValue = URLDecoder.decode(paramValue, "UTF-8");
     System.out.println("###### OUTPUT paramName" + paramName);
     System.out.println("###### OUTPUT paramValue" + paramValue);
     paramtemp.put(paramName, paramValue);
   }
   param = paramtemp;
   (...)


param est une HashMap définie précédemment dans mon code précédemment. Ce bout de code est destiné à décoder le contenu de cette hashmap.
Ce qui pose problème dans ce bout de code, c'est URLDecoder.decode. Pour une raison que je n'arrive pas à comprendre, ceci ne décode...rien. Voici le résultat de l'exécution de mon code :
CODE

###### INPUT paramName GA
###### INPUT paramValue test
###### OUTPUT paramName GA
###### OUTPUT paramValue test
###### INPUT paramName BU
###### INPUT paramValue tr�s gros éléphant
###### OUTPUT paramName BU
###### OUTPUT paramValue tr�s gros éléphant
###### INPUT paramName ZO
###### INPUT paramValue shadock
###### OUTPUT paramName ZO
###### OUTPUT paramValue shadock


On le voit clairement, le "très gros éléphant" encodé en UTF-8 sort toujours encodé en UTF-8.
Ma question est-donc, comment obtenir en sortie un décodage UTF-8?



--------------------
PoP
"Consommez malin, consommez du ragondin!"
user posted image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
momo
post 02/03/2004 16:51
Message #2


lvl1 male rogue St=1 Dex=5 Int=17 Wi=5 Ch=0
****

Groupe : Modérateurs
Messages : 1,730
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 12



http://java.sun.com/j2se/1.4.2/docs/api/ja...va.lang.String)
ben d'après, ça , ce serai parceque ton texte d'entré n'obéit pas à l'encodage %+code caractère ?


--------------------
Natural evolution insists that we are apes; artificial evolution insists that we are machines with an attitude.
Kevin Kelly - Out of control
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
PoP
post 02/03/2004 17:30
Message #3


ragondin interstellaire
*****

Groupe : Membres
Messages : 3,059
Inscrit le : 16/05/2002 23:00
Lieu : DTC, au fond à gauche
Membre no. 8



Je sais pas, depuis 14h j'arrive plus à accéder au site de sun. Le proxy de la boite doit manquer de ciboulette.
Toujours est-il qu'en procédant de la sorte:
CODE

     paramName = new String(paramName.getBytes(),"UTF-8");
     paramValue = new String(paramValue.getBytes(),"UTF-8");


J'obtiens en sortie:
CODE

###### INPUT paramName BU
###### INPUT paramValue tr�s gros éléphant
###### OUTPUT paramName BU
###### OUTPUT paramValue tr??s gros éléphant


Le "très" n'est pas décodé correctement


--------------------
PoP
"Consommez malin, consommez du ragondin!"
user posted image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
PoP
post 02/03/2004 17:54
Message #4


ragondin interstellaire
*****

Groupe : Membres
Messages : 3,059
Inscrit le : 16/05/2002 23:00
Lieu : DTC, au fond à gauche
Membre no. 8



Bon, pour tester mon code, j'ai un petit bout de php qui me fait ça:
CODE

<html>
       <body>
               <form action="http://462.462.462.462:462/connard" method="post">
                       <input type="hidden" name="ZO" value="shadock">
                       <input type="hidden" name="GA" value="test">
                       <input type="hidden" name="BU" value="<?php echo utf8_encode("E éèê A àâä I ïî O ôö U ùüû"); ?>">
                       <input type="submit">
               </form>
       </body>
</html>


Dans un browser web tout bête (mozilla) j'ai juste à cliquer sur mon chtit bouton et hop, j'obtiens mes traces suivantes:
CODE

###### INPUT paramName BU
###### INPUT paramValue E é�ê A à â� I ïî O �ö U ù�û
###### OUTPUT paramName BU
###### OUTPUT paramValue E é??ê A àâ?? I ïî O ??ö U ù??û


C'est étrange comme tous les caractères ne sont pas décodés correctement. J'en viens même à me demander s'ils sont encodés correctement...


--------------------
PoP
"Consommez malin, consommez du ragondin!"
user posted image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
PoP
post 03/03/2004 11:27
Message #5


ragondin interstellaire
*****

Groupe : Membres
Messages : 3,059
Inscrit le : 16/05/2002 23:00
Lieu : DTC, au fond à gauche
Membre no. 8



L'encodage est-il fiable? En d'autres mots, ce que je fournis à ma servlet est-il bien encodé en UTF-8?

J'ai mis ce petit bout de code dans ma servlet, pour voir...
CODE

   String test_source= "E éèêë A àâä I ïî O ôö U ùüû";
System.out.println("Chaine avec les accents: " + test_source);
   String test_URLEncoder = URLEncoder.encode(test_source, "UTF-8");
System.out.println("Chaine encodée avec URLEncoder: " + test_URLEncoder);
   String test_String = new String(test_URLEncoder.getBytes(),"UTF-8");
System.out.println("Chaine décodée avec String: " + test_String);
     String test_URLDecoder = URLDecoder.decode(test_URLEncoder,"UTF-8");
System.out.println("Chaine décodée avec URLDecoder: " + test_URLDecoder);


Et voici ce qu'il en résulte:
CODE

Chaine avec les accents: E éèêë A àâä I ïî O ôö U ùüû
Chaine encodée avec URLEncoder: E+%C3%A9%C3%A8%C3%AA%C3%AB+A+%C3%A0%C3%A2%C3%A4+I+%C3%AF%C3%AE+O+%C3%
B4%C3%B6+U+%C3%B9%C3%BC%C3%BB
Chaine décodée avec String: E+%C3%A9%C3%A8%C3%AA%C3%AB+A+%C3%A0%C3%A2%C3%A4+I+%C3%AF%C3%AE+O+%C3%
B4%C3%B6+U+%C3%B9%C3%BC%C3%B
B
Chaine décodée avec URLDecoder: E éèêë A àâä I ïî O ôö U ùüû


J'en conclue que ce que je lui fournissait en entrée à sortie de script php n'est pas de l'utf-8. Mais pourtant, j'utilise bien la fonction utf8_encode, alors où est le problème?
Serait-ce le fruit de l'interaction de l'encodage de mon browser via lequel je fais la requête vers ma servlet?
Quand je regarde le source du formulaire généré par test.php dans Mozilla, la chaine de caractère est
CODE
E éèêë A à âä I ïî O ôö U ùüû
. Par contre quand je fait la même chose sous Internet Explorer, j'obtiens...
CODE
E éèêë A àâä I ïî O ôö U ùüû
...comment être sur de ce que j'envois à ma servlet?!
Et le plus drôle dans l'histoire, c'est que mon script php est destiné à reproduire le comportement d'un browser vxml...que je n'ai pas. Super youpi chouette.
Gfx, t'as pas une idée toi l'être malsain du Java?



--------------------
PoP
"Consommez malin, consommez du ragondin!"
user posted image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Gfx
post 03/03/2004 11:38
Message #6


Goule
****

Groupe : Membres
Messages : 980
Inscrit le : 01/08/2002 23:00
Lieu : Lyon
Membre no. 106



Je peux juste te dire que j'ai énormément d'emmerdes d'UTF8 avec PHP. Entre deux versions différentes les comportements ne sont pas les mêmes (#ProgX a des soucis à cause de ça entre ma version locale et celle d'OVH). Qui plus est, quand tu forces les ISO-8859-1 dans les XML/XSLT il s'en fout ou fait de l'UTF8 fonfon (donc pas parfait) un peu quand il veut sad.gif


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
PoP
post 03/03/2004 11:48
Message #7


ragondin interstellaire
*****

Groupe : Membres
Messages : 3,059
Inscrit le : 16/05/2002 23:00
Lieu : DTC, au fond à gauche
Membre no. 8



sad.gif
Solution partielle : je vais passer tout l'après-midi chez le client à chercher avec les conditions réelles ce que je peux faire.
Je ferai part de la solution trouvée.


--------------------
PoP
"Consommez malin, consommez du ragondin!"
user posted image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
PoP
post 04/03/2004 10:37
Message #8


ragondin interstellaire
*****

Groupe : Membres
Messages : 3,059
Inscrit le : 16/05/2002 23:00
Lieu : DTC, au fond à gauche
Membre no. 8



Problème résolu. Ouf.
Ici on apprend que
QUOTE

when the HttpServletRequest.getParameter() API is called, all data of the input text is decoded and the decoded input is converted from ISO-8859-1 to UTF-16 and returned as a Java string.


En clair, il faut remettre dans sa forme original la chaine reçu pour ensuite la décoder en UTF-8 ainsi
CODE

paramName = new String(paramName.getBytes("ISO8859_1"), "UTF8");

pour que le décodage soit réalisé correctement.



--------------------
PoP
"Consommez malin, consommez du ragondin!"
user posted image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Gfx
post 04/03/2004 12:05
Message #9


Goule
****

Groupe : Membres
Messages : 980
Inscrit le : 01/08/2002 23:00
Lieu : Lyon
Membre no. 106



Heu ouais sinon tu peux décoder directement le UTF-16 smile.gif)) Remarque ça expliqeu des choses, car décoder du UTF-16 avec l'algo UTF-8... smile.gif


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
PoP
post 04/03/2004 13:29
Message #10


ragondin interstellaire
*****

Groupe : Membres
Messages : 3,059
Inscrit le : 16/05/2002 23:00
Lieu : DTC, au fond à gauche
Membre no. 8



QUOTE (Gfx @ 04/03/2004 12:05)
Heu ouais sinon tu peux décoder directement le UTF-16 smile.gif))

Bah non, parce que dans les specs du browser qui m'envoit ce que je trampoline, c'est stipulé que c'est de l'UTF-8. Et comme on est dans un contexte "La spec fait état de Loi", on va gentillement s'y conformer!
Sinon décoder de l'UTF-16 avec l'algo UTF-8, ça fait que des grumeaux!


--------------------
PoP
"Consommez malin, consommez du ragondin!"
user posted image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Peter Pan
post 04/03/2004 14:00
Message #11


Administrateur
*****

Groupe : Admin
Messages : 3,026
Inscrit le : 16/05/2002 23:00
Lieu : Paris
Membre no. 1



Hé hé moi c'est quand je me sers de la barre d'URL pour faire une recherche Google dans Firebird, il converti pas les accents ce niais smile.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicTopic OptionsStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :
 

Version bas débit Nous sommes le : : 19/04/2024 22:30