IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Changer l'encodage de fichiers Xml [XStream]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut Changer l'encodage de fichiers Xml
    Bonjour,

    J'ai un petit programme java qui permet de créer des fichiers xml via librairie XStream. Par contre, à la création des fichiers, j'ai oublié de préciser l'encodage que je souhaitais, UTF-8.
    Du coup je me retrouve avec tout un tas de fichiers xml encodés en ANSI. Et maintenant, quand je veux déserialiser ces fichiers je me retrouve avec cette exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Exception in thread "main" com.thoughtworks.xstream.io.StreamException:  : Invalid byte 2 of 3-byte UTF-8 sequence.
    	at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:88)
    	at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:70)
    	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:861)
    	at Deserializator.deserialize(Deserializator.java:34)
    	at Deserializator.main(Deserializator.java:52)
    Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 3-byte UTF-8 sequence.
    	at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    	at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:79)
    	... 4 more
    Est-ce qu'il y a un moyen de changer l'encodage de mes fichiers ?

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut
    A y est, j'ai trouvé comment faire ! Voila le programme qui change l'encodage d'un fichier en UTF-8 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    	public void encodeToUtf8(String inFileName , String outFileName) 
    	{		
    		try {
    			InputStreamReader in = new InputStreamReader(new FileInputStream(inFileName));
    			OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(outFileName), "UTF-8");
     
    			int c = in.read();
     
    			while (c!=-1) {
    				out.write(c);
    				c = in.read();
    			}
     
    			in.close();
    			out.close();
     
    		} catch (IOException e) {
    			e.printStackTrace();
    			System.out.println(e.getMessage());
    		}
     
    	}

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Plus précisément, qui suppose qu'un fichier est encodé dans le charset par défaut de la plate-forme, et l'encode en UTF-8 à la place.

    Je suis quand même assez surpris qu'une bibliothèque XML n'ait pas été foutue de relire un fichier qu'elle a elle-même créé pour des raisons de charset. Il lui suffisait d'indiquer le charset utilisé dans le prologue XML. Si c'est autre chose que UTF-8, elle a même pratiquement obligation de l'indiquer.
    Enfin...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer encodage de fichiers XML
    Par Stormy31 dans le forum VB.NET
    Réponses: 0
    Dernier message: 28/01/2009, 12h23
  2. Problème d'encodage des fichiers xml dans SAX
    Par jad_jad dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 26/05/2008, 19h51
  3. Changer l'encodage du fichier (utf-8, iso, etc.)
    Par Dimitri01 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 13/04/2007, 09h02
  4. Réponses: 7
    Dernier message: 18/08/2006, 08h09
  5. [XSL][C++]encodage fichier xml
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2006, 09h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo