Bonjour à tous,
Mon application reçoit des données XML signées (XMLDSig) et comportant des caractères accentués, de plusieurs sources différentes et son comportement lors de la vérification de la signature varie selon ces sources (bien entendu, s'il n'y a aucun caractère accentué, tout va bien ). Je m'explique :
Premier cas : les données XML sont fournies par une application externe C++ , m'assurant (mais je n'ai pas vu le code) que la chaine de caractères est encodée UTF-8, cette dernière étant construite à la volée. Si je veux que la vérification de signature fonctionne (calcul du digest, etc.), la chaine de caractères en entrée du Verifier doit être obtenue à partir de l'originale via :
xml_utf8 = new String(xml.getBytes(), "UTF-8");
Second cas : les données XML sont fournies par un client JAVA lisant un fichier XML depuis le disque (OS : Windows XP) grâce à (merci commons-io) :
textMsg = FileUtils.readFileToString(unFichier, "UTF-8");
Si je veux que la verification soit OK, alors je dois construire ma chaine comme suit :
1 2 3
| xml_utf8 = new String(xml.getBytes("UTF-8"), "UTF-8");
ou
xml_iso-8859-15 = new String(xml.getBytes(), "ISO-8859-15"); |
Mon fichier XML en entrée semble être encodé UTF-8 :
- Notepad++ l'indique dans son menu 'Format' ;
- UltraEdit indique en hexa que mes caractères accentués sont ceux attendus en UTF-8 hex, soit C3A9 pour é par exemple. De plus, il m'indique que le Byte Order Mark (BOM) au commencement du fichier est celui attendu : EF BB BF (cf. http://www.w3.org/TR/2004/REC-xml-20...ng-no-ext-info)
Il y a surement une étape que je fais mal et qui introduit un peu d'ISO mais je ne vois pas comment la découvrir
Quelqu'un peut-il m'aider ?
D'avance merci
Ticker
Partager