WebService et caractère € [Résolu] - Java - Programmation
Marsh Posté le 01-02-2008 à 12:14:58
C'est pas un problème de locale, c'est un problème d'encodage
AIX utilise un encodage donné par défaut (probablement ISO-8859-1, qui ne comprend même pas le caractère "€" d'ailleurs), ta machine locale utilise un autre encodage par défaut (sûrement Windows-1252, qui ressemble à 8859-1 mais n'est pas strictement identique, et comprend un caractère "€" ) et comme tu t'es pas posé de question, ben ça marche quand tu restes sur la même plateforme (parce que l'encoding est commun au client et au serveur) mais dès que tu parles à un serveur distant ya tout qui pête.
Solutions:
Marsh Posté le 01-02-2008 à 12:17:14
j'ai essayé de passer le paramètre axis.xmlEncoding en UTF-16 coté serveur et
Code :
|
coté client.
Mais je me prends un spendide
Citation : java.lang.InternalError: Converter malfunction (UTF-16) -- please submit a bug report via null;" |
et si c'est de l'encoding, pourquoi ? comment ?
(oui, je suis une quenelle en gestion de l'encoding)
Marsh Posté le 01-02-2008 à 12:19:50
vas lire le lien que j'ai donné.
Et les problèmes d'encodage, c'est pas des trucs qu'on règle à coup de bricolage
Marsh Posté le 01-02-2008 à 14:10:30
masklinn a écrit : C'est pas un problème de locale, c'est un problème d'encodage
|
sauf que là ça merde aussi l'aix vers aix (j'avais oublié de le préciser). Et c'set ce cas là qui sera la prod.
m'enfin je lis le truc sur l'encoding. Tout ce que j'espère, c'est pouvoir écrire une solution qui soit indépendante des plateformes de départ et d'arrivée.
Marsh Posté le 05-02-2008 à 08:39:22
bon ok, j'ai enfin fini de lire l'article.
donc il faut que je puisse controler l'encoding de se que j'envoie pour être certain de ce que je reçois. Mais comment dans le client lui dire que j'envoie de l'UTF-8 (par exemple), et comment transformer la String...
je vais regarder ça de plus près.
Sinon, je viens de tomber sur un autre problème sympa. Certain fichiers que je vais devoir faire circuler par le ws contiennent le caractère 0x0C, illégale en XML... Super...
Marsh Posté le 05-02-2008 à 08:57:50
hum... en fait, Axis discute en utf-8, par défaut (j'dis une connerie ?).
j'en reviens du coup à la locale sur le serveur AIX... est-ce que ça ne serait pas quand j'écris le fichier sur le disque que ça raterait ?
Marsh Posté le 05-02-2008 à 09:25:43
brisssou a écrit : hum... en fait, Axis discute en utf-8, par défaut (j'dis une connerie ?). |
Probablement. De toute façon, les problèmes d'encodage sont normalement aux interfaces, donc lecture/écriture de fichiers, I/O réseau, ...
Marsh Posté le 05-02-2008 à 10:04:43
et puisque le fichier est lu ensuite par un exécutable AIX, qui doit surement prendre la locale du serveur (j'imagine), puisque le fichier ne précise pas son encodage.
bref je crois que je vais aller voir l'admin de la machine, histoire de passer en 8859-15
Marsh Posté le 06-02-2008 à 12:02:27
bon, je reprends, parce qu'en fait, je suis perdu :
j'appelle le webservice depuis une application java, le webservice écrit le fichier sur le disque du serveur, et lu par un programme externe. j'ai donc ça comme chemin de ma string :
java test (WAS 6.0 AIX ou WAS 6.0 WINDOWS) --1--> webservice (WAS 6.0 AIX) --2--> filesystem AIX --3--> programme externe
en 1, comment gérer l'encodage de la String par Axis (1.2.1) ? j'ai essayé de passer Axis en UTF-16 (qui gère l'€ (?)), mais je prends l'Exception citée plus haut.
en 2, comme je n'arrive pas à être certain de l'encodage que je reçois d'Axis, j'ai du mal à décoder pour ensuite ré-encoder en autre chose.
en 3, j'ai des exemples de fichiers contenant le caractère € sur le FS de l'AIX qui sont lu correctement. Mais je ne vois pas comment déterminer l'encodage de ces fichiers...
bref...
Marsh Posté le 08-02-2008 à 15:23:10
bon, c'est plus ou moins résolu.
roulement de tambours : c'est un problème d'encoding !!
whouaaaaaa, sans déconner !!!
précisions : en fait, j'ai une appli de test de mon WS, développée sous windows, avec une chaine en dur. Le fichier source .java est donc encodé par défaut en cp1252.
J'envoie tout ça par axis (UTF8->UTF8) vers AIX, où je décode la chaine en byte[] pour l'écrire dans un fichier. getBytes() utilise l'encodage par défaut de la platforme (ici ISO 8859-1).
Voilà pourquoi tout était ok, sauf le caractère €, codé différemment dans ces deux encodages.
Avec getBytes("windows-1252" ), le fichier créé sur le disque est ok, et utilisé correctement par programme externe.
Seulement, suivant ce que mon client m'enverra comme chaine, je ne devrait donc pas décoder de la même façon. Je vais donc devoir lui demander de me passer l'encodage utilisé en paramètre de l'appel du WS.
Voilà voilà, 10 jours de recherche et de lecture de doc pour simplement ajouter un paramètre à un appel de fonction sur une String.
Mais maintenant je percute un peu mieux les problèmes d'encodage.
merci Masklinn.
Marsh Posté le 01-02-2008 à 12:02:58
j'ai écrit un webservice qui transfert entre autre, des strings, avec possiblement des caractères €
Je fais le dev' sous windows (serveur et client), puis la valid (la prod aussi) sous AIX.
en dev (windows client et serveur) => pas de soucis.
en valid (client sous windows et serveur sous AIX) => les caractères € deviennent de splendides '?'. Si je me connecte en telnet sur le serveur, je ne peux pas entrer de € dans la console ('?' appairait), pareil en xserver distant à travers cygwin.
j'ai la vague impression que c'est un problème de locale sur le serveur. mais ça me gène un peu, j'ai pas trop envie d'être dépendant de la locale du serveur pour échanger des données avec lui. comment faire ?
(pour info, la string envoyée est ensuite écrite dans un fichier pour traitement par un programme non java. La strign est également écrite dans un CLOB DB2)
edit: résolu.
Message édité par brisssou le 08-02-2008 à 15:25:04
---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris