Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2011, 14h37   #1
Invité de passage
 
Inscription : juin 2008
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 47
Points : 4
Points : 4
Par défaut Web Service UTF-8

Bonjour à tous,

J'utilise Apache uniquement pour installer des Web Service sur un poste mais j'ai un problème d'encodage des chevrons XML dans le retour.
Lorsque que je le consomme, l'enveloppe de la réponse est correcte mais le xml qu'elle contient est mal encodé (les < deviennent &lt; et les > deviennent &gt, je suppose que ça viens du charset de l'en-tête qui me reviens toujours en ISO-8859-1.
Le problème est que je n'arrive pas à mettre le charset de l'en-tête en UTF-8.

J'ai essayé plusieurs choses mais rien n'y fait, j'ai toujours un message en ISO-8859-1 :
- A l'aide du mod_charset_lite.so
Dans le httpd.conf, j'ai dé-commenté la ligne :

Code :
LoadModule charset_lite_module modules/mod_charset_lite.so
et rajouté (j'ai également essayé en mettant le CharsetDefault utf-8 hors du <IfModule>) :
Code :
1
2
3
4
<IfModule charset_lite_module>
    CharsetDefault utf-8
</IfModule>


- A l'aide du module mod_headers.so
dans le httpd.conf, j'ai dé-commenté la ligne :
Code :
LoadModule headers_module modules/mod_headers.so
et j'ai rajouté :
Code :
1
2
3
4
<IfModule headers_module>
    Header set utf-8 charset
</IfModule>
Je n'ai plus d'idées, quelqu'un pour me venir en aide ?
Merci
Darri06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 15h00   #2
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 293
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 293
Points : 8 579
Points : 8 579
A priori ce problème n'est pas lié à l'encodage : aucun encodage ne dit que les < sont codés par les octets correspondant à & puis l puis t puis enfin ;. Le problème vient du fait qu'il y a une "entitisation" XML ou HTML du message envoyé par le service Web, car &lt; est la version entité XML du caractère <.

A ta place, je regarderais plutôt ce qu'il y a entre Apache et ton Web service et je m'assurerais que ce n'est pas le Web service (ou le serveur d'appli sur lequel il tourne par exemple) qui ne fait pas cet conversion.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 15h19   #3
Invité de passage
 
Inscription : juin 2008
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 47
Points : 4
Points : 4
En réalité, voilà l'exception que j'ai au retour du web service et qui me fait pensé que c'est un problème de charset (plus de détail en pj.) :

Citation:
Une exception a été levée par la cible d'un appel:
Le type de contenu text/xml;charset=iso-8859-1 du message de réponse ne correspond pas au type de contenu de la liaison (text/xml;carset=utf-8) ...
Ensuite l'envoloppe est correcte et le message du WS est avec les &lt; et &gt;

De toute évidence le charset doit être changer lui aussi (chose que je n'arrive pas à faire), mais sur tes conseils je vais explorer aussi la piste du WS lui-même.
Images attachées
Type de fichier : png erreur.png (25,1 Ko, 4 affichages)
Darri06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 20h39   #4
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 293
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 293
Points : 8 579
Points : 8 579
On dirait qu'il y a les deux problèmes, en fait. Le client s'attend à avoir une réponse en UTF-8 mais le prologue XML du message de réponse parle de ISO-8859-1. Il faut faire en sorte que les 2 concordent.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 08h59   #5
Invité de passage
 
Inscription : juin 2008
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 47
Points : 4
Points : 4
Justement je n'arrive pas à formater ma réponse en UTF-8, je crois que ça viens d'une configuration d'Apache mais je ne sais pas laquelle.
Je ne maîtrise pas trop les Web Service, donc je ne sais pas où exactement se forme l'enveloppe de ma réponse.

Et je ne comprend pas non plus pourquoi les < > de mon xml de retour deviennent des &lt; et &gt;
J'ai cru que les 2 problèmes étaient liés mais là j'ai plus d'idée ...
Darri06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 12h10   #6
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 293
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 293
Points : 8 579
Points : 8 579
Comme je dis, je pense qu'il y a 2 problèmes. Essaie de les aborder séparément. Vois d'abord pour les &lt; en examinant une à une les couches concernées pour voir où apparaît le problème : commence par le Web service, puis le serveur sur lequel il tourne, puis Apache. Quand ce sera résolu, tu passeras sur cette histoire d'UTF-8.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 18h07   #7
Invité de passage
 
Inscription : juin 2008
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 47
Points : 4
Points : 4
Mais justement je me demande si en réglant cette histoire de UTF-8 j'aurai plus de facilité à résoudre les &lt; et &gt;

Je crois que ces 2 problèmes sont plus ou moins liés.

Mais de toute manière je ne sais pas quoi faire pour réglé un de ces 2 problèmes, t'aurais pas une piste ? au moins pour configurer le charset de retour d'Apache ?
Darri06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 22h00   #8
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 293
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 293
Points : 8 579
Points : 8 579
Le charset défini dans le fichier XML est ISO-8859-1 donc il faut qu'Apache renvoie un en-tête Content-Type avec le charset ISO-8859-1, donc plutôt mettre
Code :
AddDefaultCharset ISO-8859-1
Je pense que ta configuration de la directive Header n'est pas bonne : sachant que l'en-tête qui indique le jeu de caractères est Content-Type et que la doc de l'en-tête Header dit que le paramétrage de Header doit être "Header set header [value]", si tu veux utiliser Header il faut faire comme ça :
Code :
Header set Content-Type "text/xml; charset=ISO-8859-1"
mais ce n'est vraiment pas recommandé car tout sera indiqué comme étant du XML.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 09h17   #9
Invité de passage
 
Inscription : juin 2008
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 47
Points : 4
Points : 4
Je viens d'essayer de le rajouter dans le httpd.conf (C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf), mais ça ne change rien du tout.
J'ai essayé autant avec le ISO-8859-1 et le UTF-8 en redemarrant Apache à chaque fois, mais il n'y a aucun changement.

A chaque fois que j'ai essayé de rajouter des directives dans le .conf, je n'ai jamais eu de changement...

Tu crois qu'il y a un endroit précis dans le .conf où on doit mettre ces instructions ?
Darri06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 13h24   #10
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 293
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 293
Points : 8 579
Points : 8 579
Ca dépend : si tu as un hôte virtuel, il faut mettre le AddDefaultCharset dans le VH, sinon n'importe où dans le fichier.

Quand tu mets cette directive, le client répond toujours avec le message qui dit que le fichier est ISO-8859-1 alors que le serveur annonce de l'UTF-8 ?
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 14h03   #11
Invité de passage
 
Inscription : juin 2008
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 47
Points : 4
Points : 4
Je n'ai pas d'hôte virtuel (pas à ma connaissance en tout cas).

En fait quel que soit la directive que je met dans le .conf, le serveur renvoit toujours une réponse avec un enveloppe en ISO-8859-1 alors que le client attend justement une réponse en UTF-8 ...
Darri06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 15h55   #12
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 293
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 293
Points : 8 579
Points : 8 579
Apache ne modifie pas l'enveloppe. Il peut décider de quelques en-têtes HTTP à envoyer au client mais renvoie tel quel le contenu au client. Si le prologue XML n'est pas bon, ce n'est pas la faute à Apache mais au service Web.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 17h12   #13
Invité de passage
 
Inscription : juin 2008
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 47
Points : 4
Points : 4
C'est bon j'ai résolu le problème des &lt; et &gt;.
J'ai ajouté l'attribut xsi:type="ns2:any" au message de retour.

En revanche j'ai toujours mon problème de charset et je n'arrive pas à trouver la source.
Dans le code de mon web service, je n'ai pas accès à ce niveau d'échange, je ne peut jouer que sur le message de retour lui-même et non l'enveloppe (et encore moins l'entête).

Le Web Service est développé en Windev, concrètement sur le serveur Apache, il n'y a qu'une librairie qui contient les "action" du WS et un descriptif xml.

Je ne sais pas où se forme cette enveloppe ni cette entête.
Où se forme-elle exactement ?
Darri06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h56.


 
 
 
 
Partenaires

Hébergement Web