cs_krole
Messages postés12Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention21 octobre 2004
-
26 août 2004 à 12:11
WarLocG
Messages postés22Date d'inscriptionvendredi 6 janvier 2006StatutMembreDernière intervention 8 décembre 2007
-
6 janv. 2006 à 16:55
InputStream iStream = connection.getInputStream();
connection.connect();
ByteArrayOutputStream body = new ByteArrayOutputStream();
int c;
while ( (c = iStream.read()) != -1) {
body.write(c);
}
iStream.close();
body.flush();
String contentPage = body.toString();
body.close();
2) je crée un fichier xml avec certains éléments du code source html
3) j'utilise un xml transform pour afficher le xml créé en html.
Mon problème est que, dans certaine source html, je dois récupérer des caractères spéciaux car, dans la source de la page html j'ai bien le caractère spécial (dans ce cas là un ' ) mais dans la source récupére avec ma méthode, le caractère a disparu (et est remplacé par un esape) mais si j'utilise ultraedit et affiche en hexa, le caractère a été remplacé par un et c'est ce caractère que mon transformer xml ne reconnaît pas.
Etant donnée que je ne suis pas très à l'aise avec les encodages, j'aimerai bien votre avis pour pouvoir soit transformer ce caractère en decimal, par exemple une fois le code récupéré dans mon string soit le transformer directement lors de ma méthode
while ( (c = iStream.read()) != -1) {
body.write(c);
}
Merci à tous, je sais pas si j'ai été assez claire ?!?
Carole
cs_krole
Messages postés12Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention21 octobre 2004 26 août 2004 à 13:08
Non j'utilise ISO-8859-1 et je n'ai pas très envie d'en changer car tous mes xsl sont en ISO-8859-1.
Petite précision, si je vais online voir la source de la page j'ai bien un apostrophe ('), une fois le html récupéré par ma méthode (je l'ai écrit aussi dans un fichier texte pour debugger) je n'ai plus cet apostrophe mais un espace et en éditer hexa un 00.
Je pense que ce problème pourrait être résolu lors de ma méthode pour récupérer la source car c'est vraiement que sur certaines page que cela pose problème.
Frouf85
Messages postés106Date d'inscriptionmardi 6 mai 2003StatutMembreDernière intervention 7 octobre 2004 26 août 2004 à 13:38
Je ne comprend pas, une fois (') edité en hex est , une autre fois c'est 00.
Si j'ai bien compris, lorsque tu récupère ta page et que tu l'écrit dans un fichier sans passer par un parseur, l'apostrophe s'est transformé en espace?
Cet espace dervait alors être reconnu par le parseur (même si je sais que tu veux un apostrophe).
Je ne comprends pas tout.
cs_krole
Messages postés12Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention21 octobre 2004 26 août 2004 à 14:01
Moi non plus !!
Le code hexa qui devrait être récupéré, pour un apostrophe est 27 mais j'ai un 00.
Et l'erreur relevée par ma classe xml transform est : CaractÞre XML non valide : .
Vous n’avez pas trouvé la réponse que vous recherchez ?
Frouf85
Messages postés106Date d'inscriptionmardi 6 mai 2003StatutMembreDernière intervention 7 octobre 2004 26 août 2004 à 14:13
Je ne vois pas d'où peut venir l'erreur. Ce que je ferais c'est récupérer les caractères avec l'objet DataInputStream et en utilisant readChar(). ptêt que ça peut changer quelque chose. qui sait?
cs_krole
Messages postés12Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention21 octobre 2004 26 août 2004 à 14:53
C'est quoi du cp1252 (c'est pas mon fort l'encodage).
Mais j'ai un début d'amélioration.
J'ai rajouter, pour ma connexion : connection.setRequestProperty("Accept-Charset", "iso-8859-1,utf-8");.
Frouf85
Messages postés106Date d'inscriptionmardi 6 mai 2003StatutMembreDernière intervention 7 octobre 2004 26 août 2004 à 16:42
Lorsque tu récupère ta page html, tu la récupère avec datainputStream?
Si c'est le cas, fait un System.out.print() pour chaque caractère que tu récupères, comme ça tu va voir précisemment ce que tu récupère à la place des ' et des é.
peut être que ça peut aider à trouver la solution.
Frouf
Akbarr
Messages postés15Date d'inscriptionmercredi 15 juin 2005StatutMembreDernière intervention23 juin 20051 15 juin 2005 à 17:13
Le problème des carctères spéciaux vient du fait que tu lis de l'UTF-8. En UTF-8 les caractères accentués sont codés sur 2 bytes (Ãx).
Or tu le lis sans conversion (en mode byte) dans ton ByteArrayOutputStream, puis tu demandes un toString() sans préciser l'encodage de ton ByteArray.
Tu dois préciser à un moment donné quel est l'encodage de ton ByteArray, par exemple si tu fais body.toString("UTF-8"), tu devrais avoir les caractères accentués lisibles.
Le problème est evidement que toutes les pages que tu lis ne sont pas en UTF-8, le mieux est donc d'extraire l'encoding du stream via le 'Content-Type'.
A priori, il est inutile de restraindre l'encoding via 'Accept-Charset'.
Ci-join un petit exemple qui extrait le contenu d'une page dans un String:
WarLocG
Messages postés22Date d'inscriptionvendredi 6 janvier 2006StatutMembreDernière intervention 8 décembre 2007 6 janv. 2006 à 16:55
Je ne sais pas si ca peut t'aider mais j'ai déjà remarqué qu'en aspx, côté serveur, (c'est du vb, côté serveur) lorsque je code une string contenant des élément html (voir même de simple texte) pour les passer côté client (en vb, on utilise alors la commande response.write("texte", ou fonction() as string)). Eh bien si le texte contenais des caractères spéciaux (du genre: é, @, ...), ben il deviennent vraiment très spèciaux (du genre: tes caractères bizarres ) ! ;)