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 :

Redirection sortie standard - Problème encoding


Sujet :

Langage Java

  1. #1
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut Redirection sortie standard - Problème encoding
    Bonjour à tous,
    J'ai un programme dans lequel je redirige la sortie standard vers un JTextArea. Mon problème est que les accents ne passent pas, ils sont remplacés par un petit carré... Alors que dans la console d'eclipse, tout passe bien !

    Je fais ma redirection comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JTextArea area = new JTextArea() ;
    System.setOut( new PrintStream(new TextAreaOutPutStream(area),true,"ISO-8859-1") ) ;
    Classe TextAreaOutPutStream :
    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
    import java.io.IOException;
    import java.io.OutputStream;
     
    import javax.swing.JTextArea;
     
    public class TextAreaOutPutStream extends OutputStream
    {
     
        private JTextArea myTextArea = null;
     
        public TextAreaOutPutStream(JTextArea myTextArea) 
        {
        	super() ;
            this.myTextArea = myTextArea;
        }
     
        @Override
        public synchronized void write(int b) throws IOException 
        {
            myTextArea.append( String.valueOf( (char)b ) );
        }
    }
    J'ai essayé avec plusieurs encodages différents : UTF-8, UTF-16, ISO-8859-1 (le codage courant de mes fichiers, dans les propriétés du projet eclipse), et d'autres, toujours rien.

    J'ai cherché dans les options d'eclipse l'encodage de la console pour appliquer le même, mais pas trouvé :-/

    Merci pour votre aide

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


    Essayes d'utiliser l'encodage retourné par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.getProperty("file.encoding")
    Normalement sous Windows les textes sont encodé avec du Cp1252 ou du Cp850 (mais ne me demande pas la différence entre les deux )

    a++

  3. #3
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Salut,

    Ca fonctionne toujours pas, les accents ne sont pas pris. L'encodage que j'ai c'est Cp1252 avec System.getProperty("file.encoding"). J'ai essayé avec le Cp850, fonctionne pas non plus.

    Une autre idée peut être ? Je suis sûr que quelqu'un a déjà eu ce problème, mais je ne trouve rien là dessus...

  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
    Ce n'est pas un problème d'encodage puisque les données ne viennent pas du système mais de ton application...

    En fait cela vient de la méthode String.valueOf(char) que tu ne peut pas utiliser ici pour "convertir" le int en String !

    Le int en paramètre de la méthode write() correspond en réalité à un byte, et une grande partie de ses données sont à ignorer, ce que ne fait pas String.valueOf(), ce qui donne un résultat incorrect.

    Tu dois donc le caster en byte pour le convertir en String :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	@Override
    	public synchronized void write(int b) throws IOException {
    		myTextArea.append(new String(new byte[] { (byte) b }));
    	}
    Et je te conseillerais de redéfinir également write(byte[],int,int) pour des raisons de performances (par défaut elle fait des appels à write(int)) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	@Override
    	public synchronized void write(byte[] b, int off, int len) throws IOException {
    		myTextArea.append(new String(b, off, len));
    	}
    a++

  5. #5
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Hé hé effectivement ça fonctionne !
    J'avais repris ce code trouvé sur ce forum et qui apparemment fonctionnait, je m'étais pas posé la question.

    Merci beaucoup

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/03/2012, 11h02
  2. Thread et redirection sortie standard.
    Par cnicolas dans le forum Langage
    Réponses: 1
    Dernier message: 28/02/2010, 08h22
  3. Redirection sortie standard vers widget text
    Par issoram dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 23/01/2009, 17h57
  4. [sortie standard] problème d'affichage
    Par beekeep dans le forum C
    Réponses: 23
    Dernier message: 25/02/2008, 12h21
  5. system et redirection sortie standard sous linux
    Par Choupinou dans le forum Linux
    Réponses: 14
    Dernier message: 11/01/2007, 23h25

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