Bonjour,
J'ai vu que les problèmes d'encodage sont assez récurrents avec les manipulations de flux XML, pour preuve le nombre de discussions sur ce forum.
Je viens enrichir le sujet avec un nouveau cas... :
- J'ai une application nommée "A" qui dialogue avec une application nommée "B".
- A envoie à B un flux XML encodé en UTF-8 et avec un prologue indiquant un encodage UTF-8.
- B est appellé au travers d'une servlet donc ici B reçoit le flux XML et tente de le paser de la façon suivante :
- Lors du parsing, B plante avec une erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public void doPost(HttpServletRequest request, HttpServletResponse response) { try { DocumentBuilderFactory builder = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = builder.newDocumentBuilder(); Document document = docBuilder.parse(request.getInputStream()); ...
J'ai remarqué qu'en modifiant le prologue en UTF-16, je n'ai plus l'erreur.
Le truc, c'est que je ne peux pas me permettre de modifier le prologue (impacts trop lourds sur l'application A qui contient beaucoup d'appels à B, appels en non centralisés).
Selon moi, le parser plante car le prologue indique UTF-8 alors que le flux XML arrive en UTF-16 (en non UTF-8 comme je le pense). Pourtant, je suis certain d'envoyer en UTF-8 car si je modifie mon fichier de config pour envoyer en ISO-8859-1 tout en laissant le prologue en UTF-16 par exemple, le parser replante.
J'ai essayé différentes "bidouilles" pour reconvertir à la volée en UTF-8 mais sans succès. Je dis "bidouilles" car je ne trouve pas ça très normal de devoir retoucher un flux qui devrait avoir conservé son encodage original.
Sur le forum, les problèmes d'encodage remontées concernaient soit la lecture d'un fichier XML, soit l'envoi d'une réponse XML. Mon cas est la lecture via getInputStream d'un flux HTTP entrant.
Existe-t-il un moyen de connaître le format d'encodage du flux arrivant en inputstream ? J'ai bien vu "request.getCharacterEncoding()" mais ça me dit toujours UTF-16...
Qu'est-ce que vous pouvez me conseiller au niveau de B (code ci-dessus) sachant que je souhaite uniquement manipuler de l'UTF-8 ?
Merci de votre aide.
Partager