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 :

Problème avec les accents français lors de création de fichier Xml [JDOM]


Sujet :

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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 24
    Points
    24
    Par défaut Problème avec les accents français lors de création de fichier Xml
    Bonjour à tous,

    J'ai besoin vôtre aide concernant la création d'un fichier xml.
    Quand je crée un fichier xml les caractères avec l'accent comme (é, è, à, ô, ê) ne s'écrivent correctement.ça serait hyper de vôtre part de proposer une solution.

    je vous remercie à l'avance.

    la partie de code pour la création de xml.
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    /**
             * @param filename
             */
    public void writeXMLFile(String filename)
    {
    	this.docuXml = new Document();
    	Element module=new Element("module");
     
    	module.addContent(this.createFormations());
    	this.docuXml.setContent(module);
     
    	FileWriter writer=null;
            try
    	{
    	 File f=new File(filename);
             f.createNewFile();
    	 writer = new FileWriter(f);
     
    		 //info: Format.getPrettyFormat() put the xml's elements in order.				
    XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
     
             System.out.println("entree"); 
             outputter.output(this.docuXml, writer);
             outputter.output(this.docuXml, System.out);   
            } 
    	    catch (IOException e)
    	    {
                e.printStackTrace();
                System.err.println(e.getMessage());
            }
    }


    copié depuis le console.
    les caractères entre la balise <description> (é, è, à, ô, ê)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="UTF-8"?>
    <formation>
         <title>création d'un fichier</title>
         <description>créer un fichier xml tester les caractères (é, è, Ã*,   ô, ê)</description>
    </formation>

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    C'est un soucis d'encodage de caractères. Ici tu en as deux :
    - l'affichage dans la console.
    - l'écriture dans un fichier .xml

    #1 - Affichage dans la console.

    XMLOutputter n'est pas vraiment fait pour afficher dans la console. Vois-tu, quand on écrit dans la console, il faut impérativement le faire avec le charset par défaut de l'environnement, qu'on obtient avec Charset.defaultCharset()

    Mais sauf indication contraire, ce n'est pas ce que fait XMLOutputter. Sauf indication contraire, il écrit en utf-8, point barre. C'est assez logique pour écrire des fichiers XML, mais pas pour écrire dans la console.

    Solution : régler le Format de XMLOutputter pour utiliser le charset par défaut de l'environnement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String defaultCharset = Charset.defaultCharset().name();
    Format format = Format.getPrettyFormat().setEncoding(charset);
    XMLOutputter outputter = new XMLOutputter(format);
    #2 - L'écriture dans un fichier .xml

    Tu utilises un Writer. C'est bien quand on écrit du texte par soi-même, mais là c'est pas toi qui va t'y coller, c'est XMLOutputter.

    XMLOutputter préfère s'occuper lui-même d'encoder le texte qu'il génère en octets. Autrement dit il vaut mieux ne pas lui donner un FileWriter. Il vaut mieux lui donner un FileOutputStream.

    Raison :
    - En XML, il est recommandé de commencer par un prologue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="utf-8"?>
    qui donc, indique l'encodage de caractères du fichier .xml
    - Donc, XMLOutputter, sauf indication contraire, va générer un prologue comme ça, et indiquer un encodage de caractère.
    - Il est impossible de déterminer quel est l'encodage qu'utilise un Writer, et d'ailleurs un Writer n'utilise pas forcément d'encodage. Un FileWriter oui, mais il existe d'autres genres de Writer, on ne peut donc pas compter dessus.
    - Donc XMLOutputter va indiquer un encodage dans le prologue, mais il ne sait pas du tout s'il indique le bon : il ne peut pas deviner.
    - Il y a risque qu'il n'indique pas le bon (et c'est sûrement ce qui t'arrive).
    - C'est mal.

    Avec un FileOutputStream,
    - XMLOutputStream sait quel encodage il utilise.
    - Il ne peut pas se tromper.
    - Le problème ne se pose pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 24
    Points
    24
    Par défaut remerciment
    bonjour thelvin!

    Je te remercie d'avoir pris de temps pour m'expliquer et proposer les solutions.
    mon but était de créer un fichier xml. c'est vraiment cool de ta part.

    Je te souhaite une excellent année 2012.

    a bye

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

Discussions similaires

  1. [MySQL] Problème avec les accent lors d'une recherche dans ma base de donnée
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/06/2009, 15h08
  2. Réponses: 6
    Dernier message: 12/12/2006, 12h27
  3. Petit problème avec les accents circonflexes...
    Par Harvester dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 29/11/2005, 19h44
  4. [HTML][Encodage] Problèmes avec les accents...
    Par eraim dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 26/05/2004, 11h11
  5. [JDBC] Problème avec les accents
    Par seawolfm dans le forum Administration
    Réponses: 2
    Dernier message: 29/01/2004, 15h56

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