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

Langage Java Discussion :

Encodage de caractères : accents perdus


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut Encodage de caractères : accents perdus
    Bonjour à tous,

    Je rencontre un problème d'encodage de caractère sous Eclispe.

    Je crée un fichier essai.txt dont le contenu contient uniquement le mot "négligé", encodé à priori en UTF-8. Lorsque j'ouvre un outil Scanner pour lire son contenu et le redirigé vers la sortie standard, il ne prends pas en compte les accents...

    Voici mon code java :
    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
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
     
    public class toto {
    	public static void main(String[] args) {
    		Scanner fileReader;
    		try {
    			fileReader = new Scanner(new File("./essai.txt"), "UTF-8");
    			System.out.println(fileReader.nextLine());
    			fileReader.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}
     
    	}
    }
    Le résultat est :
    n?glig?
    Ensuite, je modifie l'encodage du fichier essai.txt pour le mettre en UTF-16 (Java utilise bien en interne UTF-16, n'est-ce-pas ?) grace à la fonction Unix iconv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iconv -f UTF-8 -t UTF-16 essai.txt > essai2.txt
    Je modifie alors la déclaration de l'objet file Reader dans le code Java en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fileReader = new Scanner(new File("./essai2.txt"), "UTF-16");
    Mais..., le résultat est toujours le même...
    Le résultat est :
    n?glig?
    Pourquoi donc n'ai je pas les accents... ???? Quelqu'un a t il une idée ?

    Pour information, je suis sous Eclipse Kepler Service Release 2 et sous Mac os X 10.9.1, sait on jamais si cela peut être utile...
    Voici aussi les fichiers essai.txt et essai2.txt utilisés :
    essai2.txtessai.txt

  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
    Je dirais que le problème est avec System.out.println(). Java n'a probablement pas bien autodétecté le charset à utiliser pour écrire dans la console. Je ne sais pas trop ce qui se passe sous Mac.

    - Il se passe quoi si tu fais System.out.println("n\u00e9glig\u00e9"); ?
    - Il se passe quoi si tu écris tes accents dans un fichier encodé en utf-8 au lieu de l'écrire dans la console ?

    Citation Envoyé par tolliob Voir le message
    Ensuite, je modifie l'encodage du fichier essai.txt pour le mettre en UTF-16 (Java utilise bien en interne UTF-16, n'est-ce-pas ?)
    Quelque chose qui ressemble en tout cas. Mais :

    - Ce que Java utilise en interne ne te regarde pas. De toute façon il le créera en utilisant un charset pour décoder et il l'écrira en utilisant un charset pour coder. Tu n'as donc pas accès à l'encodage interne. Si tu essaies d'en tenir compte, tu ne pourras pas réussir.

    - Il serait plus exact de dire que Java représente les textes sous forme de séquence de char, qui utilise le même système de surrogates que utf-16 pour représenter les caractères qui ne tiennent pas sur 16 bits (et donc pas dans un seul char.) Ce n'est pas un charset à proprement parler car il ne s'agit pas de conversion octets <-> caractères mais de conversion char[] <-> caractères. En particulier, en utf-16 il faut préciser si c'est little-endian ou big-endian, ce qui fait deux charsets utf-16 différents. La représentation interne de Java n'a pas cette question-là, un char n'a pas d'endianness.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut
    Merci Thelvin pour ta réponse !

    - Il se passe quoi si tu fais System.out.println("n\u00e9glig\u00e9"); ?
    - Il se passe quoi si tu écris tes accents dans un fichier encodé en utf-8 au lieu de l'écrire dans la console ?
    Lorsque que je fais le system.out.println(...), j'obtiens en console "n?glig? Lorsque j'écris sur un fichier encodé en UTF-8, c'est pareil... Mais en fait, lorsque j'ai des accents dans mon code, Java me produit l'erreur suivante au niveau de sauvegarder les modifications :

    Nom : eclipse_error.jpg
Affichages : 2337
Taille : 92,7 Ko

    Je n'avais pas cela avant... J'ai du modifier des choses dont je n'ai même pas conscience, en fait.

    Si je clique sur "OK", j'obtiens ce que je viens de décrire. Si je clique sur "save as UTF-8", alors, là, j'obtiens bien les accents en console et sur les fichiers.

    Mystère...

    Reste à comprendre comment sous Eclipse, un nouveau code peut être enregistrer en UTF-8..., puis reprendre tous mes codes et les enregistrer sous ce format...


    Encore une fois, Thelvin, merci pour ton aide qui m'a permis d'avancer dans ma question.

    Tolliob

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 39
    Points : 33
    Points
    33
    Par défaut
    Pour terminer cette discussion, changer l'encodage des fichier.java dans eclipse est simple.

    Un simple clic droit sur le nom du projet, puis propriétés, et on arrive sur une fenêtre avec un cadre intitulé "Text File Encoding". Il n'y a plus qu'à choisir celui voulu !

    Et voila, ça règle entièrement mon problème d'encodage.

    En espérant que ce sera peut être utile à d'autres et leur évitera de passer des heures et des heures à régler leur problème.

    Tolliob

Discussions similaires

  1. Vsftpd et l'encodage des caractères (accents)
    Par nonodev dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 12/06/2009, 21h20
  2. Encodage de caractères
    Par Anduriel dans le forum Langage
    Réponses: 13
    Dernier message: 25/04/2006, 18h22
  3. Réponses: 15
    Dernier message: 24/02/2006, 14h17
  4. [FLASH 8] Encodage de caractères...
    Par Xdrei dans le forum Flash
    Réponses: 1
    Dernier message: 24/02/2006, 07h44
  5. encodage de caractères
    Par hugo123 dans le forum Langage
    Réponses: 7
    Dernier message: 25/01/2006, 15h04

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