
Envoyé par
titou624
Je voudais tout d'abord que quelqu'un m'explique pourquoi j'ai cette exception et comment faire pour pouvoir lire ce fichier sans soucis.
Pourquoi, il faudrait qu'on ait l'URL. (D'ailleurs c'est toujours à donner, ça.)
A priori, le flux XML n'annonce pas qu'il est en autre chose que utf-8, et tu n'en informes pas ton parseur non plus. Donc, il parse en utf-8, et ça ne marche pas.
Solution #1: Ça sert à quoi de faire autre chose que de l'utf-8 ? Passe le fichier en utf-8.
Solution #2: dans la déclaration XML, ajouter encoding="iso-8859-1" :
<?xml version="1.0" encoding="iso-8859-1"?>
Solution #3: indiquer à ton parseur qu'il faut parser en iso-8859-1, sans faire d'autodétection. L'une des façons de faire ça est de lui passer un flux de chars au lieu d'un flux de bytes. Mais bon, ça dépend des parseurs et des manières de les appeler.
En effet, je dois pouvoir parser n'importe quel flux rss avec tous les encodages... Notamment utf8 et ISO...
Règle XML :
- Si aucune déclaration XML n'est présente, le document est en UTF-8
- S'il y a une déclaration XML mais que l'encodage n'y est pas précisé, c'est un encodage Unicode, auto-détecté à l'aide de la déclaration XML. En général, UTF-8.
=> Donc, si c'est pas précisé que c'est autre chose qu'utf-8, alors c'est utf-8. C'est comme ça.
Il est autorisé, toutefois, que le fournisseur et le récepteur du document XML s'arrangent pour utiliser un autre encodage, et s'échangent l'information par d'autres moyens. Exemple avec les flux RSS par HTTP : le header Content-Type, avec paramètre ;charset=iso-8859-1
Si tu retiens cette solution (par masochisme ou parce que ça ne dépend pas de toi,) il faut lire ce header, en déduire l'encodage du document, et l'indiquer au parseur (note : certains parseurs acceptent qu'on leur passe directement une URL, et auto-détectent la présence de ce header et son sens.)
Si rien ne permet de faire la différence... Ben rien ne permet de faire la différence, tiens ! Tu n'as plus qu'à essayer tous tes flux, noter leur encodage, et associer à chaque flux que tu lis dans ton programme, l'encodage que tu as vu qu'il utilise.
Partager