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 :

Encodage windows / linux


Sujet :

avec Java

  1. #1
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Points : 76
    Points
    76
    Par défaut Encodage windows / linux
    Bonjour,

    C'est plus un "arrêtez moi si je me trompe" qu'une réelle question (encore que).

    Pour corriger un bug, je vais devoir revoir une large partie de mon code, alors je préfère vous demander avant de faire des bêtises.

    Sur une interface de chat, mes clients linux ont des soucis avec les caractères accentués. J'ai bien compris que j'avais un problème d'encodage lors du transfert des données entre le client et le serveur.

    Voici comment je gère les entrées/sorties :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    connect = new Socket(host, i);
    		sortie = new PrintWriter(connect.getOutputStream());
    		entree = new BufferedReader(new InputStreamReader(connect
    				.getInputStream()));
    J'ai vu que pour le InputStreamReader, je pouvais lui indiquer un encodage. Pour le PrintWriter (qui semble être une classe basique), si j'ai bien tout compris, je ne peux pas définir d'encodage particulier. Je pense donc le transformer en OutputStreamWriter. Seulement comme je faisait partout ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sortie.println(UneString);
    			sortie.flush();
    je vais devoir faire (si j'ai bien tout compris)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sortie.write(UneString);
    			sortie.flush();
    est-ce que j'ai bon?

    Voilà pour la partie "arrêtez moi si je me trompe".

    Pour la partie questions :
    - Je n'ai aucun besoin particulier en matière d'encodage (faudrait juste qu'ils gèrent le #, c'est ma seule exigence, c'est dire...), est-ce que j'ai des raisons d'en choisir un plus particulièrement? J'ai vu que je pouvais lever une exception du type encodageinconnu ou quelque chose de ce genre, est-ce qu'il y a des encodages forcément connus par Mac, Linux et windows ?
    - Est-ce qu'il y a d'autres conséquences que simplement devoir changer mes println() en write() ?

    Merci de m'avoir lu jusque là.
    Le GridBagLayout est mon ami ! (mais si, mais si...)

  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,


    Le println() se distingue du write() car il rajoute une fin de ligne...


    Maintenant tu peux utiliser un Writer avec PrintWriter pour gérer l'encodage, ce qui te permettrait de ne pas retoucher ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Charset charset = ...
    sortie = new PrintWriter(new OutputStreamWriter(connect.getOutputStream(), charset));



    Pour info ton problème ne vient pas des clients Linux, mais simplement du fait que les systèmes utilisent des encodages par défaut différent (en général cp2152 sous Windows et utf8 sous Linux).

    Pour le choix de l'encodage cela importe peu du moment que tu ne recherches pas de caractères spéciaux... et que tu utilises bien le même encodage
    Maintenant tu pourrais privilégier l'utf8 ou l'iso-8859-1 qui devrait toujours être disponible


    a++

  3. #3
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Points : 76
    Points
    76
    Par défaut
    Saint AdiGuba (toujours lui qui s'y colle) encore une fois merci !!

    Pour ma culture personnelle, tu conseilles de passer par un charset plutôt que par la string du nom de l'encodage dans le constructeur de l'OutputStreamWriter, il y a une raison particulière?
    Le GridBagLayout est mon ami ! (mais si, mais si...)

  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
    Citation Envoyé par firgon Voir le message
    Pour ma culture personnelle, tu conseilles de passer par un charset plutôt que par la string du nom de l'encodage dans le constructeur de l'OutputStreamWriter, il y a une raison particulière?
    Perso j'utiliserais un Charset initialisé au début du traitement avant l'ouverture des connection. Cela permet de mieux gérer les cas d'erreurs : les flux ne sont pas encore ouvert

    a++

  5. #5
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Points : 76
    Points
    76
    Par défaut
    Merci, pas encore testé (ami linuxien, reviens !!) mais ça ne lève pas d'exception et ça fonctionne aussi bien qu'avant. Alors on va dire que ça marche !
    Le GridBagLayout est mon ami ! (mais si, mais si...)

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

Discussions similaires

  1. Problème d'encodage sous Windows / Linux
    Par robert_trudel dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 29/09/2009, 17h30
  2. Portabilité du code C++ de Windows -> Linux ?
    Par eraser570 dans le forum Linux
    Réponses: 29
    Dernier message: 04/09/2009, 17h02
  3. [cvs]pb encodage windows/linux
    Par bslota dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 11/12/2007, 14h09
  4. Quel est le meilleur langage pour la portabilité : Windows & Linux (voire Mac) ?
    Par iubito dans le forum Débats sur le développement - Le Best Of
    Réponses: 57
    Dernier message: 26/11/2007, 23h45
  5. windows linux vnc
    Par kinder29 dans le forum Développement
    Réponses: 6
    Dernier message: 29/02/2004, 11h30

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