2009-05-19 3 views
0

Nous utilisons un service Web qui attend UTF-8. Le framework que nous utilisons sur le client est Apache Axis2. Nous appelons le service Web et le corps de savon contient des chaînes en UTF-8. Le problème est qu'il semble que le corps est "double codé". I.e nous avons le caractère 'å'. La représentation utf-8 de 'å' dans utf-8 est C3 A5 mais nous voyons dans nos journaux que la valeur (double) codée envoyée est C3 83 C2 A5.Le corps de savon est codé deux fois par utf-8

Est-ce que quelqu'un a rencontré des problèmes similaires?

Répondre

1

La façon dont vous appelez le service Web n'est pas entièrement claire. Est-ce que la méthode dans le service Web prend juste une chaîne? Si oui, à quoi ressemble votre chaîne en Java? Toutes les chaînes Java sont encodées en UTF-16 - si vous convertissez la représentation binaire UTF-8 en une chaîne en prenant chaque octet et en le transformant en caractère, c'est le problème.

Si vous pouviez montrer à quoi ressemblait la méthode que vous appelez, et comment vous l'appelez, cela aiderait beaucoup.

Pour ce que ça vaut, j'ai utilisé Axis avec des chaînes non-ASCII sans problème dans le passé. Je soupçonne fortement que c'est un problème avec la façon dont vous l'utilisez plutôt qu'avec Axis lui-même, bien que je sois prêt à me tromper :)

EDIT: Basé sur votre commentaire, il semble que vous ayez des problèmes recevoir les données du formulaire HTML, avant de cliquer sur le service Web. Si l'utilisateur a tapé "å" dans le formulaire, c'est ce que vous devriez voir lorsque vous déboguez dans Eclipse. Si vous mettez de mauvaises données dans votre service Web, il n'est pas étonnant que vous receviez de mauvaises données à l'autre bout. Je vous suggère d'exécuter WireShark pour voir exactement ce que le navigateur vous envoie, à la fois en termes d'octets bruts et aussi quel est le contenu de l'encodage qu'il spécifie. Je suppose que votre serveur web le traite comme ISO-8859-1 mais c'est en fait UTF-8.

Une fois que vous avez la chaîne correctement dans le formulaire, je suppose que vous constaterez qu'il n'y a aucun problème à la transmettre au service Web.

+0

Je vais essayer d'expliquer comment nous appelons le service Web. Le premier service Web est un service tiers. Nous avons généré des stubs à partir du fichier wsdl. Les données sont affichées à partir d'un formulaire html et ressemble à ceci "å" si je le débogue dans Eclipse, il est affiché comme "¥". Nous créons un objet "query" qui est défini dans le stub. Nous créons ensuite l'enveloppe et le corps, puis appelons la méthode de service Web. Nous définissons également la propriété CHARACTER_SET_ENCODING à utf-8 (mais cela devrait être la valeur par défaut, n'est-ce pas?) –

+0

Votre débogage le dit. Les données ne pénètrent pas correctement dans votre application. Vous voulez probablement utiliser wireshark pour voir comment le navigateur soumet les données à votre application, car le problème existe là. –

+0

Merci à vous deux, c'était en effet les données du navigateur qui ont causé le problème. J'ai utilisé Wireshark et j'ai pensé qu'Axis était la partie défaillante. Mon serveur Web traite maintenant les données correctement comme UTF-8. (Pour Tomcat, utilisez URIEncoding = "UTF-8") –

Questions connexes