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

avec Java Discussion :

Enlever les caractères accentués


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 70
    Points : 62
    Points
    62
    Par défaut Enlever les caractères accentués
    Bonjours à tous.

    Mes revoilà pour une petite question comme le titre l'indique.
    Je suis à l'heure actuelle en train de faire un petit code pour travailler sur des fichiers.txt .

    En faite ,je voudrais pouvoir supprimer les lettres accentués du texte avant d'y travailler dessus.
    J'ai essayé plusieurs choses et la dernière est :
    J'ai mis mon texte sous forme de string ,mais les caractères accentués sont sous forme de code (lettres et chiffres dans un carré : est oui je n'y connait rien pour l'instant dans les code de caractères) .
    Donc ici impossible d'utiliser replace() ou replaceAll() .
    J'ai essayé en mettant le texte dans un tableau Array , et pas de meilleur résultat.

    Je suppose qu'il me faut récupérer les code des caractères et les forcer a changer de code (remplacer un code par un autre ).
    Problème ou trouver les codes est comment faire ?

    Si quelqu'un peut me donner un petit tuyau se serait cool

    merci d'avance .

  2. #2
    Membre actif Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Points : 254
    Points
    254
    Par défaut
    Heu t'as pas besoin des codes a priori:
    pour un e accentué:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String test="éêè";
    char[] testChar=test.toCharArray();
    test="";
     
    for(int cpt=0;cpt<testChar.length;cpt++){
     if(testChar[cpt]=='é'||testChar[cpt]=='ê'||testChar[cpt]=='è'){
      testChar[cpt]='e';
     }
     test=test+testChar[cpt];
    }
    Bon c'est vilain comme code, mais c'est la premiere chose qui me viens à l'idée. Dois surement y avoir mieux.
    La javaDoc est mon amie, elle est la tienne aussi!

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Salut,

    Une FAQ existe:

    http://java.developpez.com/faq/java/...primmer_accent

    Cordialement,

    Dan

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 70
    Points : 62
    Points
    62
    Par défaut
    j'ai du mal m'exprimer ,puisque lorsque je récupère mon fichier.txt sous forme de string ou de caractères voila ce que j'obtiens :

    fichier.txt :
    bête

    String :
    bᅢᆰte

    Je comprend pas ???

  5. #5
    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,


    Tu as tout simplement un problème d'encodage !

    • Quel est l'encodage du fichier ?
    • Comment lis-tu de fichier ?
    • Comment affiches-tu son contenu ?


    a++

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 70
    Points : 62
    Points
    62
    Par défaut
    Mon fichier est un fichier normal en .txt .
    je le récupère avec
    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
    33
    34
    35
    36
    37
    38
     
    		  FileInputStream fis;
     
     
    	         // Ouvrir les flux
     
    	        try {
     
    	                fis = new FileInputStream(new File(path));
     
     
    	                byte[] buf = new byte[1]; //pour éviter des erreurs en lisant plus de bit qu'il ne faut
    	                int n = 0;
     
    	                while((n = fis.read(buf)) >= 0) // lecture du fichier
    	                {
     
    	                    //mise dans un array des bytes du texte 
    	                      for(byte bit : buf){
     
    	                        	al.add( (char)bit) ;
    	                        	longueurArray++ ;
     
     
    	                      }
    	                }
     
    	                //On ferme nos flux de données
    	                fis.close(); 
     
    	                //fermer les flux
     
    	        } catch (FileNotFoundException e) {
    	    		e.printStackTrace();
     
    	        } catch (IOException e) {
    	        	e.printStackTrace();
    	        }
    Et je le met dans un String avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         String phrase = "";
    	  for( int i = 0 ; i < longueurArray ; i++) {
     
    		   phrase += String.valueOf( al.get(i));
    	  }
    Et quand je lis le String j'ai un truc qui ressemble à : bᅢᆰte

  7. #7
    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
    Citation Envoyé par yoann34 Voir le message
    Mon fichier est un fichier normal en .txt .
    Un fichier texte utilise forcément un encodage !!


    Pour lire un fichier texte il faut utiliser un reader qui fera la conversion byte<->char selon l'encodage. De plus ton code de lecture est loin d'être correct et encorem oins performant (opérateur + dans une boucle, double boucle de traitement).

    Dans ton cas puisque tu ne le connais pas on utilisera l'encodage par défaut :
    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
    	public static String read(File file) throws IOException {
    		Reader reader = new FileReader(file);
    		try {
    			StringBuilder sb = new StringBuilder();
    			char[] cbuf = new char[8196]; // buffer de lecture
    			int len;
     
    			while( (len=reader.read(cbuf)) >= 0) {
    				sb.append(cbuf, 0, len);
    			}
     
    			return sb.toString();
    		} finally {
    			reader.close();
    		}
    	}
    a++

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Re,

    "Et quand je lis le String j'ai un truc qui ressemble à : bᅢᆰte "

    Tu ne dis toujours pas comment "tu lis le String".
    Est-ce un affichage à la console MSDOS (println) ?

    Dan

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 70
    Points : 62
    Points
    62
    Par défaut
    Ton programme marche bien.
    En effet je récupères bien un string avec les accents ,mais impossible de les supprimer dans sb.
    j'ai essayé plusieurs méthode sans succé.
    je ne comprend pas tout : je suis vraiment une bille pas possible ???

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 70
    Points : 62
    Points
    62
    Par défaut
    Oui j'obtiens bien bᅢᆰte avec println.
    Mais si je l'enregistre dans un fichier en déplacent le bytes j'ai les 2 carrés qui sont séparés et donc plus d'accent .

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    À toutes fins utiles, pour l'affichage à la console MSDOS voici une petite méthode:

    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
     public static String accents() //static si appelée depuis un context static 
          {
             try
             {
             //  sortie à la console MSDOS avec les caractères accentués
                Writer w =
                   new BufferedWriter
                   (new OutputStreamWriter(System.out, "Cp850"));
                w.write(ligne_avec_accents);
                w.flush();
                w.close();
             }
                 catch (Exception e)
                {
                   e.printStackTrace();
                }
             return "";
          }
    Appel de la méthode:

    par exemple depuis la méthode main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ....
    ....
    static String ligne_avec_accents = ""; // déclaré au niveau global (class)
    ....
    ...
     
             String phrase = "Pour l'affichage à la console MSDOS voici une petite méthode:";
             System.out.println("Avec println: " + phrase);
             ligne_avec_accents = "Avec la méthode accents(): " + phrase + "\n";
             accents();
    Cordialement,

    Dan

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 70
    Points : 62
    Points
    62
    Par défaut
    Merci pour tout ,mais cela ne résous pas mon problème.

    Je crois que se problème dépasse de beaucoup mais connaissance.

    Je cherche juste a supprimer les accents dans mon fichier et de le réenregistrer tel quel.

    merci encore pour tout .

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Alors pourquoi ne cliques-tu pas sur le lien indiqué plus haut:

    http://java.developpez.com/faq/java/...primmer_accent

    Dan

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 70
    Points : 62
    Points
    62
    Par défaut
    Si si j'ai utiliser Normalizer a chaque fois que je récupère un string contenant tout mon texte.
    Je suppose que c'est comme cela qu'il faut s'y prendre. mais aucun changement ne s'opère .

    Mon cerveau commence a Bugger .

    Je ne sais plus comment faire .

  15. #15
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Tu peux essayer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Static retour = ""; // au niveau class
    Puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
           public static String sansAccents(String source) {
             //return Normalizer.normalize(source, Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "");
             retour =
                Normalizer.normalize(source, Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "");
             return "";
          }
    Appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
             String source = "Bête";
             sansAccents(source);
             System.out.println("retour: " + retour);
    Et on a bien retour = Bete...

    Dan

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Je me trompe peut-être mais tu t'embêtes pour rien car le problème ne se pose que pour les println:

    Peu importe ce que tu as dans le fichier.

    Par exemple tu as le texte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String texte = "Je me trompe peut-être mais tu t'embêtes pour rien car\n"
    + "le problème ne se pose que pour les println:";
    Avec println, tu auras les merdouilles des accents et si tu le veux, appliques ce qu'on a vu plus haut, la méthode que je t'ai indiquée, ou la suppressions des accents, ou le code de adiGuba.
    Mais dans un programme réel, on n'utilise pratiquement pas la console MSDOS, mais par exemple l'affichage dans une fenêtre ou une boîte de dialogue.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Avec le texte c-dessus:
             javax.swing.JOptionPane.showMessageDialog(null,texte);
    Cordialement,

    Dan

  17. #17
    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
    Citation Envoyé par danimo Voir le message
    Mais dans un programme réel, on n'utilise pratiquement pas la console MSDOS, mais par exemple l'affichage dans une fenêtre ou une boîte de dialogue.
    la console ms-dos n'est peut etre pas traditionellement utilisée sous windows, mais sous d'autres OS, les console sont souvent utilisées.

    Si tes accents ne se suppriment pas, c'est probablement parce qu'ils ne sont pas détectés. La première chose à faire c'est de déterminer l'encodage de ton fichier. En effet, il faut établir, en définitive, la chaine suivante


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fichier(byte) -- encodage --> String java --> String sans accents 
                                                    /     \
                                                   /       \
                                             encodage   encodage
                                                 /          \
    affichage <--encodage--console DOS(byte)-----            ----fichier resultat (byte)

    A tout moment, les deux coté d'un "encodage" doivent parler le même code. Donc pour lire ton fichier tu devra créer un Reader qui utilise le bon codage (sans ça t'aura des crasses dans ta string et ce sera pas la pein de continuer). Pour envoyer vers la console ms-dos, tu devra utiliser le même codage que la console utilise (sinon l'affichage sera foireux). Pour stocker dans le fichier destination, tu devra choisir un codage qui conviens à ton besoin.

  18. #18
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Salut tchize_

    Ben oui, je suis sûrement trop Windows...

    Mais c'est noté!

    Cordialement,

    Dan

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 70
    Points : 62
    Points
    62
    Par défaut
    Et bien une bonne nuit de sommeil et le cerveau fonctionne mieux

    Le problème est donc résolut. A vouloir faire trop vite on ne réfléchi pas assai.
    Effectivement comme tu l'as dit danimo Normalizer fonctionne bien : il suffit de bien l'utiliser !

    Pour résoudre mon problème j'ai donc utilisé la méthode de adiGuba pour récupérer mon texte sous forme de String ,
    et en suite normalizer pour supprimer mes accents , ce qui fonctionne à merveille.

    Pour toute votre attention ,et votre temps passé à m'aider , je vous remercie infiniment
    Bonne journée à tous et à bientôt (certainement) .

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

Discussions similaires

  1. [AJAX] Problèmes avec les caractères accentués
    Par marti dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 26/10/2005, 14h10
  2. Réponses: 5
    Dernier message: 04/09/2005, 12h34
  3. Réponses: 6
    Dernier message: 14/07/2005, 14h25
  4. [C#][ADO] Enlever les caractère spéciaux
    Par Oberown dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/01/2005, 18h38
  5. [PostgreSQL] Les caractères accentués ?
    Par yacomor dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/02/2003, 16h30

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