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 :

Fichier ANSI contenant des accents, convertir en UTF-8


Sujet :

Entrée/Sortie Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 181
    Points
    181
    Par défaut Fichier ANSI contenant des accents, convertir en UTF-8
    Bonjour,la majorité des fichiers que je lis sont des fichiers texte au format ansi , contenant des accents notamment.
    Quand je les lis en java comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     bf = new BufferedReader(new InputStreamReader (new FileInputStream(jTextField1.getText())));
            while((ligne=bf.readLine() ) !=null) {
     
            jTextArea1.append( ligne + "\n");
            }
    ne marche pas, j'ai des caractères Escape dans mon textArea.

    J'ai essayé de lire le fichier directement en utf8 mais ca ne marche toujours pas :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            bf = new BufferedReader(new InputStreamReader (new FileInputStream(jTextField1.getText()),"utf-8"));
            while((ligne=bf.readLine() ) !=null) {
     
             jTextArea1.append( ligne + "\n");
            }
              bf.close();
     
            }
    alors je me suis orienté vers


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jTextArea1.append( new String(ligne.getBytes("UTF8"),"UTF8") + "\n");
    et ça ne fait rien.

    Help comment faire pour convertir ces fichus caractères escape de l'ansi!!!

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    Citation Envoyé par batou22003 Voir le message
    J'ai essayé de lire le fichier directement en utf8 mais ca ne marche toujours pas :
    Il fallait faire l'inverse : si c'est un fichier ANSI il fallait essayer de le lire directement en ANSI, présumant que par défaut ta machine est configurée pour autre chose.

    À noter que depuis Java 1.7 il n'est plus nécessaire de s'embêter avec FileInputStream, InputStreamReader et BufferedReader : tu utilises la classe Files une fois pour toutes et c'est bon.
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Path file = Paths.get(fileName);
     
    try(Stream<String> lines = Files.lines(file, Charset.forName("windows-1252"))) {
     
      lines.forEach(line -> System.out.println(line));
     
    }
    Ce que tu appelles ANSI est probablement le mieux représenté par le charset windows-1252.
    On ouvre un stream des lignes de ce fichier, lues dans ce charset. Puis pour chaque ligne, on l'affiche. Puis on quitte le try, ce qui ferme le stream.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try(Stream<String> lines = Files.lines(file, Charset.forName("windows-1252"))) {
     
      lines.forEach(line -> System.out.println(line));
     
    }
    Wow, y a ça dans java 1.7 ?! On n'arrête pas le progrès ! Me coucherai moins bête moi !

    pour batou, comme dit thelvin, lorsque tu lis un fichier, tu dois préciser l'encodage de la source. Si ta source est en ANSI, tu précises "ANSI" dans le constructeur de au moment de la lecture (InputStream). Ce qu'il faut comprendre, c'est que l'encodage de destination n'a aucune importance tant que tu n'as pas à écrire. En revanche, si tu cherches par exemple à convertir ton fichier, càd à le remplacer par son équivalent utf-8, il faudra préciser "UTF-8" dans le constructeur de ton OutputStream.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Sharcoux Voir le message
    Wow, y a ça dans java 1.7 ?! On n'arrête pas le progrès ! Me coucherai moins bête moi !
    Bah Stream et lambdas c'est du Java 1.8.
    Mais try-with-resources et la classe Files, c'est là depuis Java 1.7, et permet des manipulations bien plus pratiques que tous ces FileInputStream, InputStreamReader et BufferedReader à construire en chaîne.
    Quitte à donner un exemple, autant en donner un pour la version en cours.

    Citation Envoyé par Sharcoux Voir le message
    Si ta source est en ANSI, tu précises "ANSI" dans le constructeur de au moment de la lecture (InputStream).
    Euh non, parce que ANSI comme encodage en réalité ça veut rien dire. Quand les gens disent "c'est un fichier ANSI" ils veulent dire la plupart du temps windows-1252, ou parfois iso-8859-1.
    windows-1252 étant un sur-ensemble de l'autre, il vaut mieux indiquer juste ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    J'avais encore jamais regardé en détail la classe Files. En même temps, vu le nombre de posts traitant de comment lire un fichier ligne par ligne en Java et la réaction des débutants la première fois qu'ils voient à quel point c'est compliqué pour un truc finalement assez basique, il était temps de simplifier le problème ! Mais je savais pas que ça avait été fait dans java 7.

    Pour "ANSI", mille pardon. Je croyais me souvenir que ça passait, mais c'est complètement faux.

    Enfin bref. Ca change pas la logique, pour la lecture, tu fais comme enseigné par maître Thelvin, et pour l'écriture, tu utilises par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Writer output = new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8");
    Pour du travail à l'ancienne, ou alors la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Files.write(path, lines, Charset.forName("UTF-8"))
    depuis 1.7 (à nouveau, merci Thelvin )

Discussions similaires

  1. Parser un fichier XML contenant des accents
    Par Shadew dans le forum Général Python
    Réponses: 4
    Dernier message: 17/06/2015, 18h27
  2. Charger un fichier texte contenant des caractères
    Par dm_manu dans le forum MATLAB
    Réponses: 5
    Dernier message: 24/12/2006, 02h37
  3. Réponses: 3
    Dernier message: 22/06/2006, 17h34
  4. Compilation d'un fichier contenant des accents
    Par LG59 dans le forum Langage
    Réponses: 9
    Dernier message: 26/05/2006, 15h56
  5. nom de répertoire contenant des accents
    Par isa38 dans le forum Windows
    Réponses: 6
    Dernier message: 21/07/2005, 10h27

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