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

Format d'échange (XML, JSON...) Java Discussion :

Probleme UTF-8 java, fichier xml


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 80
    Points
    80
    Par défaut Probleme UTF-8 java, fichier xml
    Bonjour,
    Notre application travail avec des fichiers xml, et recemment on a trouver que 20 d'entre eux ne s'affichait pas correctement dans IE ou Firefox a cause d'un mauvais format d'encodage, apparu a cause de l'apparition du symbole £ dans le fichier xml.

    Dans le header du fichier xml, on specifie clairement UTF-8, mais apres quelques recherches j'ai cru comprendre que cela ne signifie que le format ou le document doit etre encoder, on peut tres bien ecrire UTF-8 mais avoir un document encoder d'une autre facon.

    Donc je dois trouver dans notre code le moment ou le fichier xml s'encode de la mauvaise facon, je suis partit a la source, et il s'agit de code c++ comminuquant avec notre application via JNI (Arretez moi si je dis des beties ) , le code C++ va chercher le xml dans une base de donnees et l'envoi a notre application java.

    J'ai donc juste modifier le code C++ pour qu'il ecrive dans un fichier log le code qu'il nous envoi pour voir si le xml qu'on recoit est au depart au bon format, et il semblerait que oui, car il y a un charactere special avant le £ :


    E, 45
    C, 43
    Â, ffffffc2
    £, ffffffa3
    5, 35
    0, 30

    Ce code nous envoi la string grace a la methode NewStringUTF d' un objet de type JNIEnv.

    Neanmoins, dans java, lorsque l'on recuperer cette String,je fais directement un println sur cette String, et le caractere speciale n'est plus la !

    EC£50

    Meme en mode debug et en regardant le tableau de la string je ne le vois pas.


    Es-ce que je loupe quelque chose d'evident ? Je n'ai pas vraiment de grosses connaissances sur l'encodage de fichier, et je peux lire dans la doc de String qu'il utilise UTF-16 si je comprends bien ?
    > A String represents a string in the UTF-16 format in which supplementary characters are represented by surrogate pairs (see the section Unicode Character Representations in the Character class for more information).

    On a vraiment besoin d'ecrire le XML encode en UTF-8, savez vous comment s'y prendre ? Merci !

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 631
    Points
    21 631
    Par défaut
    Citation Envoyé par fardon57 Voir le message
    Dans le header du fichier xml, on specifie clairement UTF-8, mais apres quelques recherches j'ai cru comprendre que cela ne signifie que le format ou le document doit etre encoder, on peut tres bien ecrire UTF-8 mais avoir un document encoder d'une autre facon.
    Je confirme qu'il ne faut pas le faire, mais que c'est évidemment possible. De la même manière, rien n'empêche de poser une étiquette "haricots" sur un bocal à cornichons, mais les enfants qui passent par là croiront pendant des années qu'un cornichon s'appelle un haricot.

    Je n'ai pas vraiment de grosses connaissances sur l'encodage de fichier, et je peux lire dans la doc de String qu'il utilise UTF-16 si je comprends bien ?
    > A String represents a string in the UTF-16 format in which supplementary characters are represented by surrogate pairs (see the section Unicode Character Representations in the Character class for more information).
    Oui, c'est exact, mais il faut bien comprendre que ce que Java utilise en interne pour stocker ses String ne te concerne pas.
    Il utilise un moyen qui lui permet de stocker tout Unicode, donc il peut stocker de l'Unicode. C'est tout ce qu'il y a à savoir, du moins dans ton cas.



    Bon, sinon : en ce qui me concerne je ne t'avais pas répondu car il y avait quelque chose que je trouvais incohérent dans tes résultats. Mais comme personne ne semble répondre, j'ai essayé de reproduire tes résultats et j'ai été bluffé : en fait il n'y a aucune incohérence, juste un fait rare.

    Mais bref. J'ai besoin de plus d'informations.

    En quoi  est-il un caractère spécial ?

    Quelle information votre fichier XML doit-il contenir, au juste ? Le texte de ce fichier XML, est-ce que ça doit être "EC£50" ou bien "EC£50" ?

    J'explique : quand on transforme la chaîne "EC£50" en octets, voici ce qu'on obtient :

    En UTF-8 :

    E: 0x45 ;
    C: 0x43 ;
    £: 0xc2 ; 0xa3
    5: 0x35 ;
    0: 0x30

    En latin-1 :

    E: 0x45 ;
    C: 0x43 ;
    £: 0xa3 ;
    5: 0x35 ;
    0: 0x30

    C'est super bizarre, mais en UTF-8, £ se code exactement comme en latin-1, avec juste un octet devant. Je n'avais jamais remarqué que ça pouvait arriver.

    Du coup, en utf-8, il n'y a pas de "charactère spécial Â" devant le £. £ se représente avec deux octets : 0xc2 ; 0xa3 et il se trouve qu'en latin-1, 0xc2 est Â, et 0xa3 est £.
    Ce "caractère spécial" n'est a priori pas à afficher, et il semble qu'il n'y ait aucun problème.

    Il faudrait que tu vérifies.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par fardon57 Voir le message
    car il y a un charactere special avant le £ :
    Ce n'est pas un caractère spécial.
    C'est simplement qu'en UTF8 certains caractères sont encodés sur 2 octets...


    Ton erreur sur le XML vient du fait que tu utilises un encodage incorrect à un moment donné qui va aboutir à une valeur incorrect.

    Pour plus d'info il nous faudrait avoir les portions de code qui contiennent les "communications" entre ton programme et l'extérieur. En clair :
    • Comment tu récupères ta chaine ?
    • Comment tu écris dans le fichier ?


    D'après tes commentaires, c'est ce dernier point qui semble poser problème (puisque la chaine semble correct lorsque tu l'affiches via un println...

    a++

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Je confirme qu'il ne faut pas le faire, mais que c'est évidemment possible. De la même manière, rien n'empêche de poser une étiquette "haricots" sur un bocal à cornichons, mais les enfants qui passent par là croiront pendant des années qu'un cornichon s'appelle un haricot.



    Oui, c'est exact, mais il faut bien comprendre que ce que Java utilise en interne pour stocker ses String ne te concerne pas.
    Il utilise un moyen qui lui permet de stocker tout Unicode, donc il peut stocker de l'Unicode. C'est tout ce qu'il y a à savoir, du moins dans ton cas.



    Bon, sinon : en ce qui me concerne je ne t'avais pas répondu car il y avait quelque chose que je trouvais incohérent dans tes résultats. Mais comme personne ne semble répondre, j'ai essayé de reproduire tes résultats et j'ai été bluffé : en fait il n'y a aucune incohérence, juste un fait rare.

    Mais bref. J'ai besoin de plus d'informations.

    En quoi  est-il un caractère spécial ?

    Quelle information votre fichier XML doit-il contenir, au juste ? Le texte de ce fichier XML, est-ce que ça doit être "EC£50" ou bien "EC£50" ?

    J'explique : quand on transforme la chaîne "EC£50" en octets, voici ce qu'on obtient :

    En UTF-8 :

    E: 0x45 ;
    C: 0x43 ;
    £: 0xc2 ; 0xa3
    5: 0x35 ;
    0: 0x30

    En latin-1 :

    E: 0x45 ;
    C: 0x43 ;
    £: 0xa3 ;
    5: 0x35 ;
    0: 0x30

    C'est super bizarre, mais en UTF-8, £ se code exactement comme en latin-1, avec juste un octet devant. Je n'avais jamais remarqué que ça pouvait arriver.

    Du coup, en utf-8, il n'y a pas de "charactère spécial Â" devant le £. £ se représente avec deux octets : 0xc2 ; 0xa3 et il se trouve qu'en latin-1, 0xc2 est Â, et 0xa3 est £.
    Ce "caractère spécial" n'est a priori pas à afficher, et il semble qu'il n'y ait aucun problème.

    Il faudrait que tu vérifies.
    Merci pour ton aide, c'est beaucoup mieux que de ne pas repondre !

    La chaine qu'on cherche a obtenir, c'est effectivement "EC£50" en UTF-8. Je parlais du caractere special Â, car justement c'est la facon de le coder en UTF-8 : 0xC2; 0xA3 ... Alors quand je fais un print du cote du code C++ juste avant d'envoyer le xml, je vois bien le texte en UTF-8, lorsque je fais en suite un println du coter java sur la String qui recoit le resultat, je ne vois que "£" et rien devant, donc sa devient incorrect pour de l'UTF-8 ...

    Je pense qu'il y a bien un probleme, car les browser refusent d'afficher notre fichier XML car illisible, et lorsque que je l'enregistre sur mon bureau et le save en UTF-8 a partir d'un software, il se lit correctement sous IE et firefox ...

    De plus, une fois sauvegarder en UTF-8, lorsque je compare les 2 fichiers XML avec un logiciel hexadecimal je vois bien le caractere special avant le £ pour le fichier qui fonctionne, et rien pour l'autre ... Je vais essayer de vous sortir une image

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 631
    Points
    21 631
    Par défaut
    Citation Envoyé par fardon57 Voir le message
    La chaine qu'on cherche a obtenir, c'est effectivement "EC£50" en UTF-8. Je parlais du caractere special Â, car justement c'est la facon de le coder en UTF-8 : 0xC2; 0xA3 ... Alors quand je fais un print du cote du code C++ juste avant d'envoyer le xml, je vois bien le texte en UTF-8, lorsque je fais en suite un println du coter java sur la String qui recoit le resultat, je ne vois que "£" et rien devant, donc sa devient incorrect pour de l'UTF-8 ...
    Bah non, c'est correct. Tu stockes la chaîne "EC£50" dans un String. Donc à l'affichage, ça met "EC£50". Il n'y a aucun problème. String n'a rien à péter des encodages.

    Je pense qu'il y a bien un probleme, car les browser refusent d'afficher notre fichier XML car illisible, et lorsque que je l'enregistre sur mon bureau et le save en UTF-8 a partir d'un software, il se lit correctement sous IE et firefox ...
    Ça pourrait être un autre problème.

    En fait, c'est probablement un autre problème. Un soucis d'encodage empêche rarement la page de s'afficher, et ce cas précis ne l'empêcherait probablement pas du tout. Exception : si la page passe par une phase de validation avant transformation XSLT par exemple, et que la validation vérifie la présence du code exact.

    De plus, une fois sauvegarder en UTF-8, lorsque je compare les 2 fichiers XML avec un logiciel hexadecimal je vois bien le caractere special avant le £ pour le fichier qui fonctionne, et rien pour l'autre ... Je vais essayer de vous sortir une image
    Le soucis est peut-être au moment de l'encodage du fichier envoyé au navigateur.

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Bah non, c'est correct. Tu stockes la chaîne "EC£50" dans un String. Donc à l'affichage, ça met "EC£50". Il n'y a aucun problème. String n'a rien à péter des encodages.



    Ça pourrait être un autre problème.

    En fait, c'est probablement un autre problème. Un soucis d'encodage empêche rarement la page de s'afficher, et ce cas précis ne l'empêcherait probablement pas du tout. Exception : si la page passe par une phase de validation avant transformation XSLT par exemple, et que la validation vérifie la présence du code exact.



    Le soucis est peut-être au moment de l'encodage du fichier envoyé au navigateur.
    Interessant. Oui en effet, j'y ai repenser apres coup, c'est un peu idiot de ma part de m'attendre a retrouver ce caractere dans la String ... Mais que voulez vous, c'est les erreurs de debutant .

    Comme tu l'as dit, c'est un autre probleme ! Je pense avoir trouver, lorsque la VM se lance, elle a un file.encoding par defaut, ce que je ne savais pas (Visiblement personne impliquer dans notre application non plus ... Et cette valeur est par defaut Cp1252 ! Donc j'ai juste modifier cette valeur par -Dfile.encoding=UTF-8 . Maintenant ca a l'air de fonctionner !

    Merci, je vous tiens au courant si cela marche lorsque notre application tourne reelement.

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 631
    Points
    21 631
    Par défaut
    Une solution préférable serait de préciser l'encodage à utiliser à chaque fois qu'il y a besoin d'encoder/décoder un fichier texte.

    Des fois ce sera utf-8, des fois ce sera latin-1. On ne peut pas changer l'encodage par défaut à chaque fois, et puis le faire sans se poser de question risque de créer des bugs.

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Une solution préférable serait de préciser l'encodage à utiliser à chaque fois qu'il y a besoin d'encoder/décoder un fichier texte.

    Des fois ce sera utf-8, des fois ce sera latin-1. On ne peut pas changer l'encodage par défaut à chaque fois, et puis le faire sans se poser de question risque de créer des bugs.
    C'est clair, je vais voir comment faire cela.

    Par contre, une funny thing. Maintenant que j'ai mis l'encodage en UTF-8, si je fais un println sur ma String java :
    <Name>RWE EC£50.24

    Cela contredit quelque peu le commentaire de thelvin !

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fardon57 Voir le message
    Cela contredit quelque peu le commentaire de thelvin !
    Au contraire cela ne fait que le confirmer :
    Citation Envoyé par thelvin
    On ne peut pas changer l'encodage par défaut à chaque fois, et puis le faire sans se poser de question risque de créer des bugs.
    Tu écris en UTF8 sur une console qui attend du Cp1252, et donc tu obtiens des caractères incorrect !

    Il ne faut pas modifier le file.encoding mais simplement spécifier l'encodage spécifique lorsque tu en as besoin.

    a++

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Au contraire cela ne fait que le confirmer :

    Tu écris en UTF8 sur une console qui attend du Cp1252, et donc tu obtiens des caractères incorrect !

    Il ne faut pas modifier le file.encoding mais simplement spécifier l'encodage spécifique lorsque tu en as besoin.

    a++
    Ah d'accord ! Merci pour cette precision ! D'ailleurs, pourquoi la console s'attend-t-elle a recevoir du Cp1252 ?

    Alors cela m'amene a la question finale : Comment specifier qu'elle format d'encoding pour une unique String ? Et non pas pour toute mon application. Je vois des trucs comme charset, charsetEncoder et decoder, suis-je sur la bonne voie ? Quelqu'un pourrait-il m'eclairer la dessus ? Merci !

  11. #11
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fardon57 Voir le message
    Ah d'accord ! Merci pour cette precision ! D'ailleurs, pourquoi la console s'attend-t-elle a recevoir du Cp1252 ?
    Parce qu'il faut bien qu'elle en utilise un, et qu'elle utilise l'encodage par défaut du système (tu dois donc être sous Windows).


    Citation Envoyé par fardon57 Voir le message
    Alors cela m'amene a la question finale : Comment specifier qu'elle format d'encoding pour une unique String ?
    En Java une String est toujours encodé en UTF-16 et il n'y a pas à changer cela !


    Ce qu'il faut que tu changes c'est les interactions entre ton programme et l'extérieur au sens large... en spécifiant l'encodage si besoin.


    a++

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 631
    Points
    21 631
    Par défaut
    Ah d'accord ! Merci pour cette precision ! D'ailleurs, pourquoi la console s'attend-t-elle a recevoir du Cp1252 ?
    Il faudrait demander les détails à Microsoft, mais j'imagine que c'est parce que la plupart des programmes en ligne de commande écrivent en cp1252. Ça peut sûrement se régler autrement.

    Alors cela m'amene a la question finale : Comment specifier qu'elle format d'encoding pour une unique String ? Et non pas pour toute mon application.
    Une String n'a pas d'encodage. L'encodage n'intervient que quand on veut transformer une String en octets, ou l'inverse.

    Comment faire, eh bien, la plupart des méthodes Java concernées proposent d'ajouter un paramètre optionel "charset". C'est en fait le nom de l'encodage qu'il faut y passer. Si on n'utilise pas ce paramètre, l'API utilisera le charset par défaut, ce qui est mal.

    Je vois des trucs comme charset
    Oui, c'est ça. Juste le paramètre charset des méthodes que tu appelles quand tu transformes tes String en octets, et vice-versa.

    CharsetEncoder c'est pour les cas plus compliqués.

  13. #13
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Parce qu'il faut bien qu'elle en utilise un, et qu'elle utilise l'encodage par défaut du système (tu dois donc être sous Windows).



    En Java une String est toujours encodé en UTF-16 et il n'y a pas à changer cela !


    Ce qu'il faut que tu changes c'est les interactions entre ton programme et l'extérieur au sens large... en spécifiant l'encodage si besoin.


    a++
    J'ai toujours un coup de retard ! Je viens de lire ce post : http://www.developpez.net/forums/d53...atible-latin1/
    Tres interessant ! Donc si je comprends bien, au sein de java, les string fonctionnent en UTF-16, et il ne faut rien toucher a cela ! Ce que je dois prendre en compte, c'est mes points d'entrees/sortie de ces string justement. Donc dans mon cas, c'est au moment ou j'ecris cette String dans un fichier xml qu'il faut faire attention a l'encodage. J'ai bon ce coup ci ?

  14. #14
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fardon57 Voir le message
    Ce que je dois prendre en compte, c'est mes points d'entrees/sortie de ces string justement. Donc dans mon cas, c'est au moment ou j'ecris cette String dans un fichier xml qu'il faut faire attention a l'encodage. J'ai bon ce coup ci ?
    Oui... Et c'est ce que j'indiquais dans mon premier message un peu plus haut...

    a++

  15. #15
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Oui... Et c'est ce que j'indiquais dans mon premier message un peu plus haut...

    a++
    Vrai, merci a toi ,et aux autres aussi , vos connaissances me sont tres precieuses !

    Bon, ayant un peu analyser notre application, je pense que je ne dois que gerer la sortie du fichier xml, et non l'entree.

    En effet, on recoit une String via JNI dont on store le byte array. Puis sur notre page web, lorsqu'un utilisateur clique sur un xml qu'il desire afficher, c'est la qu'on le cree. Donc j'ai essayer de jouer avec l'objet HTTPServletResponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    response.setContentType("text/xml; charset=UTF-8");
    ServletOutputStream os = response.getOutputStream();
    String tradeId = onRecupereLinformation();
    os.print(tradeID);
    Voila en gros ce qui se passe. Cependant, meme en mettant l'encodage de la reponse en UTF-8, je n'arrive pas a voir le fichier xml sur IE/Firefox ...

    Par contre, en mettant -Dfile.encoding=UTF-8 , ca fonctionne impeccable ... Mais bon ce n'est pas la solution rechercher.

    J'ai voulu verifier que ma String tradeId etait toujours au bon format, es-ce que c'est possible de verifier cela ? Car si elle n'est plus au bon format (Peut etre a cause d'intervention dans les profondeurs du code ! ) Je m'acharne pour rien

  16. #16
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Tu précises l'encodage mais tu ne l'utilises pas !

    getOutputStream() renvoi des données binaires sans aucun encodage !
    Ceci doit être utilisé uniquement pour renvoyer des fichiers binaires.



    Pour renvoyer du texte il faut utiliser getWriter() qui encodera le tout proprement selon l'encodage indiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	response.setContentType("text/xml; charset=UTF-8");
    	PrintWriter writer = response.getWriter();
    	try {
    		writer.print(tradeId);
     
    		// ...
     
    	} finally {
    		// sans oublier de fermer le tout proprement
    		writer.close();
    	}
    a++

  17. #17
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Tu précises l'encodage mais tu ne l'utilises pas !

    getOutputStream() renvoi des données binaires sans aucun encodage !
    Ceci doit être utilisé uniquement pour renvoyer des fichiers binaires.



    Pour renvoyer du texte il faut utiliser getWriter() qui encodera le tout proprement selon l'encodage indiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	response.setContentType("text/xml; charset=UTF-8");
    	PrintWriter writer = response.getWriter();
    	try {
    		writer.print(tradeId);
     
    		// ...
     
    	} finally {
    		// sans oublier de fermer le tout proprement
    		writer.close();
    	}
    a++
    Merci bien, je t'aime toi !
    Effectivement, je ne savais pas que le getOutputStream ne prenait pas en compte l'encodage ... C'est genial, merci !

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

Discussions similaires

  1. [DOM] probleme de fermeture de fichier xml apres modification
    Par bibi73 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 08/04/2008, 17h13
  2. [SimpleXML] probleme pour parser un fichier XML
    Par gilles974 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 27/03/2008, 11h01
  3. [DOM] Encodage UTF-8 dans fichier XML et PHP
    Par norkius dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 03/01/2007, 16h44
  4. [XSLT] probleme de parcourt deux fichiers xml dans xsl
    Par coucouA dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 23/07/2006, 21h32

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