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 :

encodage du fichier texte


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 181
    Points : 64
    Points
    64
    Par défaut encodage du fichier texte
    bonjour tout le monde,

    je developpe un programme java sous Netbeans et je manupule des données textuelles.
    j'extrais à partir d'un fichier texte ligne par ligne et à chaque fois je stocke la ligne courante dans une liste de String.
    L'encodage de mon fichier texte est UTF-8.

    Mon problème réside au niveau de ma liste et pour seulement la première ligne du fichier un petit point apparaît au début de la chaine !
    Ce petit point se considère comme étant un caractère ! et il disparaît quand je change mon encodage de UTF-8 à ANSI alors que je voudrais garder l'encodage UTF-8 (puisque il accepte les caracatères accentués)

    voila :

    Nom : Capture.PNG
Affichages : 840
Taille : 550 octets

    Aidez moi SVP à resoudre ce problème
    Merci

  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
    Hello,

    Il faut que tu attaches le fichier pour qu'on comprenne de quoi tu parles, bien sûr -_-°.

    Un coup c'est un petit point et un coup c'est un !
    Si tu ne peux pas expliquer ce qui t'arrive avec des mots, tu peux le faire avec ton fichier et le code qui essaie de le lire/écrire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 181
    Points : 64
    Points
    64
    Par défaut
    Bonsoir,

    j'ai appliqué cette méthode pour générer à chaque fois une liste des sous chaines de chaque mot de mon fichier (ci-joint) test.txt:
    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
     static public void gnerationNGrams(ArrayList<String> liste, String str, int n) {
            if (str.length() <= n) { // (==n)
                liste.add(str);
                /* int counter = 0;
                while (counter < n) {
                    liste.add(str.substring(counter));
                    counter++;
                } */
                return;
            } else {
                int counter = 0;
                String gram = "";
     
                while (counter < n) {
                    gram += str.charAt(counter);
                    counter++;
                }
                liste.add(gram);
                gnerationNGrams(liste, str.substring(1), n);
            }
        }
    Lors de l'appel dan le main :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Path out1 = Paths.get("chemin/mon_fichier.txt"); // l'encodage de mon fichier UTF-8
                Scanner sc = new Scanner(out1);
     while (sc.hasNextLine()) {
    ....
    gnerationNGrams(l, m, x);
    System.out.println("l'extraction de " + x + "-grames: " + l);
    ....
    }
    Le résultat du traitement donne :

    Nom : 1.PNG
Affichages : 825
Taille : 1,0 Ko
    Nom : 2.PNG
Affichages : 831
Taille : 1,0 Ko
    Nom : 3.PNG
Affichages : 825
Taille : 924 octets
    Nom : 4.PNG
Affichages : 829
Taille : 850 octets
    Nom : 5.PNG
Affichages : 837
Taille : 910 octets
    Nom : 6.PNG
Affichages : 825
Taille : 1,0 Ko

    et si je change l'encodage du fichier out à ANSI , le point disparaît mais les caractère accentués aussi

    J'èspére de j'ai bien expliqué mon problème merci de m'aider s'il vous plaît

  4. #4
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il faut préciser l'encodage du fichier à la lecture, sinon c'est l'encodage par défaut qui est utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                Scanner sc = new Scanner(out1, "utf8");

    Certains éditeurs placent un BOM du début du fichier (un caractère spécial qui permet de reconnaitre le type d'UTF utilisé pour l'encodage).
    Si tu lis le fichier avec un autre encodage cela peux te génèrer un caractère inconnu...


    a++

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu as un BOM au début de ton fichier UTF-8, comme le précise adiguba. Par contre, si tes accents s'affichaient correctement, tu as alors un autre problème supplémentaire ailleurs parce que ce fichier est utf-8 et les accents ne se lisent pas correctement en iso-8859-1.



    Je rajoute que ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                int counter = 0;
                String gram = "";
     
                while (counter < n) {
                    gram += str.charAt(counter);
                    counter++;
                }
                liste.add(gram);
    est absolument non performant, implique la création et destruction de nombreux objets et peut avantageusement être remplacé par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                liste.add(str.subString(0,n));
    On ne concatène pas des strings dans une boucle en java!

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 181
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    Merci pour vos réponses, mais encore le même problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    static public ArrayList<String> gnerationNGrams(ArrayList<String> liste, String str, int n) {
            if (str.length() <= n) { // (==n)
                liste.add(str);
                return liste;
            } else {
     
                liste.add(str.substring(0,n));
                gnerationNGrams(liste, str.substring(1), n);
            }
            return liste;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Path out1 = Paths.get("Monchemin/test.txt");
                Scanner sc = new Scanner(out1,"utf8");
    while (sc.hasNextLine()) {
                    String m = sc.nextLine();
    gnerationNGrams(l, m, x);

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    grumpf, j'ai réussi à oublier depuis tout ce temps que l'utf8 avec BOM est dans la twilight zone de java

    Pour dire les choses simplement, le reader java ne retire pas le BOM, un (pleins de) bug est ouvert chez eux mais ils ne comptent pas le corriger car ça casserait des outils existant
    http://bugs.java.com/view_bug.do?bug_id=4508058
    http://bugs.java.com/view_bug.do?bug_id=6959785

    Youhou :'(

    Bon, la bonne nouvelle c'est que tu peux quand même faire une évac manuelle du caractère
    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
    32
    package test;
    import java.io.*;
    import java.nio.file.*;
    import java.util.*;
    public class Test {
       static public ArrayList<String> gnerationNGrams(ArrayList<String> liste, String str, int n) {
            if (str.length() <= n) { // (==n)
                liste.add(str);
                return liste;
            } else {
     
                liste.add(str.substring(0,n));
                gnerationNGrams(liste, str.substring(1), n);
            }
            return liste;
      }
      public static void main (String[] argv) throws Exception{
         ArrayList<String> l = new ArrayList<String>();
         Path out1 = Paths.get("J:\\test.txt");
         Scanner sc = new Scanner(out1,"utf8");
         boolean firstLine = true;
         while (sc.hasNextLine()) {
               String m = sc.nextLine();
               if (m.startsWith("\uFEFF")){
                 m = m.substring(1);
               }
               firstLine=false;
               gnerationNGrams(l, m, 3);
         }
         System.out.println(l);
      }
    }

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 181
    Points : 64
    Points
    64
    Par défaut
    Bonsoir ,

    Je vous remercie

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

Discussions similaires

  1. [Débutant] Comment connaitre le type d'encodage des fichiers textes ?
    Par saxrub dans le forum VB.NET
    Réponses: 1
    Dernier message: 30/03/2012, 12h26
  2. encodage dans fichier texte
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 11
    Dernier message: 06/01/2012, 18h13
  3. encodage de fichier texte
    Par julien.63 dans le forum Général Python
    Réponses: 7
    Dernier message: 05/11/2009, 13h35
  4. Type d'encodage de fichiers texte
    Par bit_o dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 28/02/2007, 11h28
  5. Déterminer l'encodage du fichier texte
    Par ze.Ninus dans le forum Langage
    Réponses: 1
    Dernier message: 10/10/2006, 17h43

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