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 :

[En Cours] Problème d'encodage..


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Par défaut [En Cours] Problème d'encodage..
    Bonjour tout le monde !

    Alors voilà, après de nombreuses tentatives ayant toute comme résultat l’échec, je viens vous demander de l'aide..
    Mon problème est, comme le dit le titre, un problème avec l'encodage, peut-importe les tentatives que j'ai faîte, le résultat reste le même, tous les messages contenant des caractères spéciaux ou accents ect.. sont affiché en "?".
    Certains sont doublés même du au 2 encodages subit voici le résultat quand les messages passe par les 2 encodages :
    http://puu.sh/63oDb.png
    Voici maintenant les codes de ces encodage :
    _out = new String(_in.getBytes(),"UTF8");
    Puis :
    _out = new String(_in.getBytes("UTF8"));

    Je souhaite d’abord convertir en unicode pour les packets de l'émulateur, puis renvoyé le tout en utf8 pour le client, pour qu'à l'affichage, les accents fonctionne bien. Cependant, cela ne fonctionne pas, et j'ai beau tout essayé, le résultat reste le même. La machine où est placé l'émulateur est une Linux scientific, je ne sais pas si cela change grand chose ou pas, mais je tiens à vous le spécifiez, au cas où cela à une incidence dessus.

    En espérant que vous y arriverez..
    Bien cordialement,

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par juju77160 Voir le message
    Certains sont doublés même du au 2 encodages subit voici le résultat quand les messages passe par les 2 encodages :
    http://puu.sh/63oDb.png
    Voici maintenant les codes de ces encodage :
    _out = new String(_in.getBytes(),"UTF8");
    Puis :
    _out = new String(_in.getBytes("UTF8"));
    Si comme je le pense "_in" est une String, alors ce code revient à faire du n'importe quoi et il n'y a rien d'étonnant à voir ces problèmes.



    En Java une String n'est pas associé à un encodage. On ne peut pas le changer comme tu souhaites le faire.
    L'encodage doit être spécifié uniquement lorsqu'on lit ou écrit des données dans un flux d'octets...


    Donc :
    Comment lis tu tes données ?
    Comment écris-tu tes données ?

    Mais surtout ne tente pas de modifier l'encodage de la String entre les deux, tu ne fera rien de bon !


    a++

  3. #3
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Une string en Java n'a pas vraiment d'encodage: elle représente un texte, point barre. Rien n'est indiqué concernant sa sérialisation (= sa conversion d'une String vers un flux de bytes).

    L'encodage n'est intéressant/spécifié que lorsque l'on manipule des flux de données (~ tableaux de bytes).

    Puisqu'une string n'a pas d'encodage, pour la convertir dans un encodage donné, on utilise la méthodes getBytes (comme tu l'as fait), mais non pas pour recréer une nouvelle string (!) mais plutôt pour obtenir la suite de bytes qui représente la chaîne originale dans un encodage donné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String test = "abc_éàè";
    byte[] asUtf = test.getBytes("UTF-8");
    byte[] asAscii = test.getBytes("ASCII");
    byte[] asPlateformDefault = test.getBytes();
     
    String newString = new String(asUtf, "UTF-8");
    assertEquals(test, newString);


    [EDIT] grilled

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Par défaut Réponses
    Le problème, c'est que le code fonctionne sur mon pc fix (Windows) mais pas sur mon pc distant, qui lui est sur linux.

  5. #5
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par juju77160 Voir le message
    Le problème, c'est que le code fonctionne sur mon pc fix (Windows) mais pas sur mon pc distant, qui lui est sur linux.
    Ce code ne fonctionne pas... il "tombe en marche" !
    Mais cela reste incorrect et complètement faux.


    a++

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    la question qu'il faut se poser, comme déjà dit, c'est d'ou viens _in et t'en fais quoi au final. Tu dis avoir des ? mais tu les a ou? Dans la console? Dans le fichier généré? Sur une page web? Et le texte, il viens d'ou? D'un fichier? D'un base de données? ...

    Tu as un problème soit à la lecture de tes données, soit à l'écriture, voir aux deux.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Par défaut Réponse
    Je n'ai pas essayé dans la console, mais les accents provienne des messages envoyé par les "utilisateurs" partie client donc, qui est retransmis à l'émulateur puis renvoyé au client.
    Le _in correspond au "packet" reçu par le client qui est en "String", _out aussi.
    Packet (String) est remplie par un champs Char.

    Est-ce possible que cela vienne de la machine seulement ? Ce même code fonctionnais sur un ancien vps linux (Mais un autre que scientific)

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Non, c'est juste ton code qui est en cause. Montre nous comment tu contruit ton in, parce que ton explication n'est pas claire. J'en conclue que des ? s'affichent à l'écran. C'est l'écran d'une interface graphique ou d'un console? Et comment tu les envoie là dedans?

    Si tu ne veux pas nous montrer le code, disons alors que ton code doit respecter, au minimum les règle suivante:

    à chaque fois que tu ouvre un Reader, tu dois utiliser le constructeur qui prends en paramètre l'encodage à utiliser. A chaque fois que tu ouvre un writer, même chose. Et ce, des deux coté de la transmission, si tu utilise des sockets réseau comment je le comprends. Et jamais, jamais tu ne dois utiliser String.getBytes() ou new String(byte[])!!

Discussions similaires

  1. [CSV] Problème d'encodage
    Par simoryl dans le forum Langage
    Réponses: 13
    Dernier message: 18/04/2012, 16h20
  2. Problème d'encodage avec Python
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 22/02/2006, 15h36
  3. Problème d'encodage en Unicode
    Par Skreo dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/12/2005, 11h43
  4. Problème d'encodage sur MySql 4.1
    Par Blanchet dans le forum Outils
    Réponses: 1
    Dernier message: 04/12/2005, 05h53
  5. [XML::PARSER] Problème d'encodage
    Par frangin2003 dans le forum Modules
    Réponses: 13
    Dernier message: 05/09/2005, 15h59

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