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

Entrée/Sortie Java Discussion :

Ecrire un String dans un fichier encodé en UTF-8


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Par défaut Ecrire un String dans un fichier encodé en UTF-8
    Bonjour à tous,

    J'ai un problème lors de l'écriture d'une chaîne de caractère générée par mon programme dans un fichier qui doit être au format UTF-8.

    Lorsque je fais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    File f = new File("c:/test.xml");
    FileOutputStream fos = new FileOutputStream(f);
    fos.write("éèà".getBytes("UTF-8"));
    fos.close();
    pas de problème, j'ai bien un fichier UTF-8 (je l'ouvre avec notepad++ et dans format j'ai "Encoder en UTF-8 (sans BOM)". A propos si quelqu'un peut me dire la différence entre UTF-8 et UTF-8 (sans BOM) je le remercie d'avance.

    Par contre lorsque je remplace "éèà" par mon objet String construit dans mon programme, le fichier généré est au format "Encoder en ANSI".

    Pour info, le String que je construis est une concaténation d'éléments constants (balises "<balise>", "</balise>", etc..), de saut de ligne ("\n") et de données récupérée d'une base oracle qui n'est pas encodé en UTF-8.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
    xml.append("<REFS>\n");
    xml.append("<ref_1>");
    xml.append(value);
    xml.append("</ref_1>").append("\n");
    xml.append("</REFS>");
    Je vous remercie pour votre aide.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Déjà deux petites remarques sur ton code :
    • Ne pas oublier le try/finally !
    • Utilise un Writer plutôt que getBytes() ! C'est fait pour cela

    Bref quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	File f = new File("c:/test.xml");
    	Charset charset = Charset.forName("UTF-8");
    	Writer writer = new OutputStreamWriter(new FileOutputStream(f), charset);
    	try {
    		writer.append("éèà");
    	} finally {
    		writer.close();
    	}


    Pour ce qui est de l'ANSI, cela correspond en fait à l'encodage Windows-1252 (encodage par défaut de Windows), qui est une extension de l'ISO-8859-1.

    Or il se trouve qu'un fichier texte ne comporte QUE des caractères, et aucunes informations quand à son encodage. A la lecture les éditeurs tentent de détecter l'encodage du fichier. Or il se trouve que ces différents encodages peuvent avoir des caractères communs. Ainsi UTF8 et ANSI (et surement beaucoup d'autres encodages) utilise le même code pour les caractères ASCII...


    Je suppose que le fichier que tu génères ne possèdent pas de caractères "spéciaux", et qu'il en résulte le même encodage ! Du coup notepad arrive parfaitement à lire le fichier en ANSI et le considère comme tel !



    La solution serait justement d'utiliser le BOM : cela consiste tout simplement à insérer en tout début de fichier un meta-caractère ('\uFEFF') qui indique que le fichier est en UTF8.

    Attention toutefois car cela pourrait poser des problèmes avec des applications qui ne sont pas prévu pour gérer cela...


    a++

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Par défaut
    Merci adiGuba pour ton aide très précieuse.

    J'ai rajouté le BOM en tout début de fichier et il est bien considéré comme un fichier encodé en UTF-8 par notepad++ mais surtout par l'application qui utilise mon fichier XML.

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

Discussions similaires

  1. [Borland 4]Ecrir String dans un fichier
    Par grmi91 dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/04/2007, 12h14
  2. Ecrire 4 lignes dans un fichier texte
    Par kikica dans le forum Langage
    Réponses: 2
    Dernier message: 17/03/2006, 16h04
  3. Ecrire un objet dans un fichier
    Par mikebranque dans le forum C++
    Réponses: 3
    Dernier message: 14/03/2006, 13h39
  4. Ecrire et lire dans un fichier texte
    Par podz dans le forum C
    Réponses: 3
    Dernier message: 25/10/2005, 16h57
  5. Comment enregistrer une string dans un fichier
    Par Dnx dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 23/09/2005, 14h52

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