Bonjour,
J'ai un problème d'encodage : comment convertir une chaîne de caractère que récupère le contenu d'un fichier txt en utf8 ?
Merci pour votre aide
Bonjour,
J'ai un problème d'encodage : comment convertir une chaîne de caractère que récupère le contenu d'un fichier txt en utf8 ?
Merci pour votre aide
Salut,
Soit utiliser new InputStreamReader(new FileInputStream( file ),"UTF-8"), soit Files.newBufferedReader(path, StandardCharsets.UTF_8).
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Bonjour,
Merci pour votre réponse,et je m'excuse pour le mauvais endroit ou j'ai posté ma question.
en fait j'ai besoin seulement de convertir un contenu qui est sous forme de chaine de caractère en UTF8
Merci infiniment
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 String content = ""; String line; while ((line = mailReader.readLine ()) != null) content += line + "\n"; //ici j'ai récupéré le contenu du fichier et après je dois le convertir pour l'envoyer par mail byte ptext[] = content.getBytes(ISO_8859_1); String value = new String(ptext, UTF_8);
Voila toute la partie du code qui parcoure le fichier pour bien me comprendre:
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 // Ouverture du fichier contenant le sujet + le message à envoyer // et du fichier contenant les destinataires BufferedReader mailReader = new BufferedReader (new FileReader (mailFile)); BufferedReader destReader = new BufferedReader (new FileReader (destFile)); affiche("accès aux fichiers destinataires & contenu Mail"); // Lecture du sujet (première ligne) String subject = mailReader.readLine (); affiche("affichage objet mail .............."+subject); // Lecture du contenu du message String content = ""; String line; while ((line = mailReader.readLine ()) != null) content += line + "\n"; byte ptext[] = content.getBytes(ISO_8859_1); String value = new String(ptext, UTF_8); // String str1 = "àéô'..."; // String str2 = new String(str1.getBytes(),Charset.forName("UTF-8")); affiche("contenu mail 1................."+content); mailReader.close ();
Il y a une confusion : les chaines ne sont pas encodées (ou plus exactement on s'en moque, c'est juste de la cuisine interne à Java). Seuls les flux d'octets le sont. Quand tu lis ton fichier texte, il est sous forme d'octets qui encodent les chaînes, dans un encodage donné. Et tu le lis en décodant avec le bon code. Ensuite, en mémoire tu manipules des String. Pas besoin de convertir quoique ce soit. Ensuite, si tu as besoin d'écrire ces String dans un fichier, il faudra là les encoder, par le Writer.
Ce genre de code est un non sens. Il veut dire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 byte ptext[] = content.getBytes(ISO_8859_1); String value = new String(ptext, UTF_8);
- je convertis ma chaîne en flux d'octets en encodant les caractères avec de l'ISO_8859_1 ;
- je prends un flux encodé en ISO_8859_1 et j'en fait une chaîne en disant que le flux est en fait encodé en UTF-8. Ce n'est donc pas logique (et ça ne fonctionne que si par hasard tous les caractères sont des codes en communs aux deux encodages, sinon ça donne n'importe quoi.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Si ton fichier est en ISO_8859_1, lit le avec cet encodage,
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 try( BufferedReader mailReader = Files.newBufferedReader (mailFile.toPath(), StandardCharsets.ISO_8859_1); BufferedReader destReader = Files.newBufferedReader (destFile.toPath(), StandardCharsets.ISO_8859_1);) { affiche("accès aux fichiers destinataires & contenu Mail"); // Lecture du sujet (première ligne) String subject = mailReader.readLine (); affiche("affichage objet mail .............."+subject); // Lecture du contenu du message StringBuilder content = new StringBuilder(); String line; while ((line = mailReader.readLine ()) != null) { content.append(line); content.append('\n'); } affiche("contenu mail 1................."+content); }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Pour cette partie du code j'été seulement entrain de faire des jeux de tests,je m'excuse
Donc si j'ai bien compris je dois encoder au début d'ouverture du fichier ,pas moyen pour encoder une chaine de caractère (content)?
Non en fait mon fichier est de type fichier txt
je retrouve le problème avec les caractère spéciaux comme: é à ç
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 BufferedReader mailReader = new BufferedReader (new FileReader (mailFile)); BufferedReader destReader = new BufferedReader (new FileReader (destFile)); affiche("accès aux fichiers destinataires & contenu Mail"); // Lecture du sujet (première ligne) String subject = mailReader.readLine (); affiche("affichage objet mail .............."+subject); // Lecture du contenu du message String content = ""; String line; while ((line = mailReader.readLine ()) != null) content += line + "\n"; affiche("contenu mail 1................."+content); mailReader.close ();
On n'encode jamais de chaîne de caractères (c'est ce que je te disais dans mon précédent message) : les caractères sont encodés par Java en mémoire, parce qu'au final c'est toujours des octets, mais ça ne nous concerne pas en tant que développeur. On manipule des chaînes de caractères, un point c'est tout.
On a besoin de décoder des flux d'octets pour les convertir en chaînes lorsqu'on lit des flux (des fichiers, des sockets, etc...) et on a besoin d'encoder quand on écrit dans des flux d'octets (des fichiers, des sockets...). Ensuite, quand on a des String, on les utilise, c'est tout. Plus besoin de se préoccuper de notion d'encodage, jusqu’à'à ce qu'on ait besoin de les écrire dans un flux ou un tableau d'octets (Et un flux/tableau écrit avec un encodage doit être lu avec le même encodage).
Ok, et c'est pour ça que tu le lis avec un Reader. Mais le fait que ça soit un txt n'empêche pas que sur le disque, c'est du binaire de tout manière. Simplement, le caractère du texte ont été convertis en séquence d'octets en utilisant une table de correspondance caractère<->séquence d'octets : c'est ça l'encodage. Lorsqu'on relit le fichier, on doit utiliser la même table pour ré obtenir les caractères d'origine. Si on utilise une autre table, on aura des caractères non voulus, voire pire : des caractères de remplacement, pour une séquence d'octets inconnue, et il sera impossible de retrouver le caractère d'origine (puisque la conversion du caractère de remplacement donnera une séquence d'octets différentes de celle d'origine).
lorsqu'on ne précise pas d'encoding au Reader, il l'utilise un encodage par défaut, qui n'est probablement pas celui du fichier.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Merci pour ces informations @joel.drigo
Donc si j'ai bien compris je dois lire le fichier au début avec l'encodage UTF8 ?
Merci de me spécifier dans quelle partie je dois intégrer l'encodage
Désolé pour le dérangement
Je t'ai donné l'exemple en message 6. Sauf que tu mets StandardCharsets.UTF_8 au lieu de StandardCharsets.ISO_8859_1.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Merci @joel.drigo
je vais essayer de refaire cette partie comme vous avez mentionné,et je vous tiendrais au courant.
Merci encore une fois
salut joel.drigo,
j'ai essayé d’intégrer la partie que vous m'avez parlé,mais çela n'a pas marché car j'ai deja déclaré "mailfile" et "destfile" (le problème que j'ai mnt c'est avec le mailfile,j'ai essayé de l'enregister sous format UTF8 mais sans vain)comme étant des éléments de tableau de string;
voila le code :
avez vous une visibilité sur ce problème .
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 public static void envoiMails(String [] mails){ // Vérification du nombre d'arguments if (mails.length != 4) { System.out.println ("usage: java from smtphost mailfile destfile"); System.exit (1); } // Récupération des arguments String from = mails [0]; String smtphost = mails [1]; String mailFile = mails [2]; String destFile = mails [3]; affiche("MailFILE........."+mailFile); affiche("DestFile........."+destFile); try { // Ouverture du fichier contenant le sujet + le message à envoyer // et du fichier contenant les destinataires BufferedReader mailReader = new BufferedReader (new FileReader (mailFile)); BufferedReader destReader = new BufferedReader (new FileReader (destFile)); affiche("accès aux fichiers destinataires & contenu Mail"); // Lecture du sujet (première ligne) String subject = mailReader.readLine (); affiche("affichage objet mail .............."+subject); // Lecture du contenu du message String content = ""; String line; while ((line = mailReader.readLine ()) != null) content += line + "\n"; affiche("contenu mail 1................."+content); mailReader.close (); //après il y a une partie de code d'envoi de mail
Merci d'avance.
Bah oui, justement, j'ai écrit mon exemple avec tes variables...
Tu remplaces tout le bloc de code :
par celui que j'ai indiqué dans le message 6.
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 BufferedReader mailReader = new BufferedReader (new FileReader (mailFile)); BufferedReader destReader = new BufferedReader (new FileReader (destFile)); affiche("accès aux fichiers destinataires & contenu Mail"); // Lecture du sujet (première ligne) String subject = mailReader.readLine (); affiche("affichage objet mail .............."+subject); // Lecture du contenu du message String content = ""; String line; while ((line = mailReader.readLine ()) != null) content += line + "\n"; affiche("contenu mail 1................."+content); mailReader.close ();
Ok, mailFile et destFile, ne sont pas des java.io.File mais des String. Au lieu de mailFile.toPath() mets Paths.get(mailFile). Pareil pour destFile.
Quand tu parles de "j'ai essayé de l'enregister sous format UTF8", tu parles d'écrire un fichier ?
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Bonjour,
Merci pour votre réponse,je viens de résourdre le problème en spécifiant l'encodage au moment d'ajout du contenu du message dans la classe message:
et çela à marché heureusement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part message.setContent (content, "text/plain;charset=utf-8");
Merci infiniment @joel.drigo pour votre collaboration.
je vais mettre le sujet en résolu .
Bonne soirée.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager