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 :

[String]Comparaison de chaine


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut [String]Comparaison de chaine
    Soit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String s = "";
    s += (char)129;
    byte[] buf;
    buf = s.getBytes();
    String s2 = new String(buf);
    System.out.println(s.compareTo(s2));
    La méthode compareTo entre s et s2 retourne 66 alors que je m'attendais à ce qu'elle retourne 0.
    J'imagine qu'il y a un probleme d'encodage de caracteres la dessous mais je n'arrive pas à trouver une exeplication correct. une idée ?

  2. #2
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par Guybrush
    Soit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String s = "";
    s += (char)129;
    byte[] buf;
    buf = s.getBytes();
    String s2 = new String(buf);
    System.out.println(s.compareTo(s2));
    La méthode compareTo entre s et s2 retourne 66 alors que je m'attendais à ce qu'elle retourne 0.
    J'imagine qu'il y a un probleme d'encodage de caracteres la dessous mais je n'arrive pas à trouver une exeplication correct. une idée ?

    rajoute un system.out.println de s.getBytes

    A priori (char) 129 n'est pas égal à bytes de ca ... ( ce qui me parait logigue )
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    ou c'est effectivement le cas, mais dans ce cas comment insérer des caractères avec un code ascii > à 128 dans une chaine ?

  4. #4
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par Guybrush
    ou c'est effectivement le cas, mais dans ce cas comment insérer des caractères avec un code ascii > à 128 dans une chaine ?
    au lieu de getBytes .. un getChars ne marche pas ?
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    non car ensuite je veux transférer lma chaine sur le réseau, et il faut necessairement que ce soit sous forme de byte[].

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Peut-être en triffouillant du coté de l'encodage ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    probablement mais :

    1- je ne sais pas quel charset utiliser
    2- si j'encode ma chaine d'une coté du réseau, de l'autre coté il faudra que j'utilise le même charset pour la decoder. Or il n'y a pas de moyen de connaitre l'encodage d'une chaine.

  8. #8
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Citation Envoyé par Guybrush
    1- je ne sais pas quel charset utiliser
    Ca, c'est comme tu veux. Personnellement, j'aime bien UTF-8 (qui est généralement celui utilisé sur les machines Unix/Linux)

    Citation Envoyé par Guybrush
    2- si j'encode ma chaine d'une coté du réseau, de l'autre coté il faudra que j'utilise le même charset pour la decoder. Or il n'y a pas de moyen de connaitre l'encodage d'une chaine.
    Il y a un déjà eu un topic ouvert sur le sujet. Je n'ai plus le lien en tête mais recherche "détection d'encodage" sur le forum, tu devrais le retrouver.

    Ceci dit, si tu codes toi-même l'application, tu dois normalement t'occuper du serveur et du client (ou alors communiquer avec les personnes qui s'occupent du client pour vous mettre d'accord sur l'encodage)

    Si le client est un navigateur web (appli web), tu peux alors préciser l'encodage de ce que tu envoies (en entête de tes pages web).

    Et ce dernier principe peut-être généralisé aux autres cas d'utilisation: le premier message de communication que tu envoies au client est l'encodage de tes futurs messages.

    Les solutions ne manquent donc pas...

    [Edit mode craquage]Ceci étant mon 777e message, j'ai tous les droits! [/Edit mode craquage]
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  9. #9
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Je viens de tester ton code, il m'affiche bien 0...

    Peut-être parce que new String(byte[]) et getBytes() utilisent l'encodage par défaut du système, et que dans mon cas c'est UTF-8 (sous kubuntu).

    EDIT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public static void main(String... args) throws UnsupportedEncodingException {
    		String s = "";
    		s += (char) 129;
    		byte[] buf;
    		buf = s.getBytes("ISO-8859-1");
    		String s2 = new String(buf,"ISO-8859-1");
    		System.out.println(s.compareTo(s2));
    	}
    Même en ISO-8859-1 ça marche... ça m'affiche 0...
    C'est sans doute parce que tu es sous windows avec l'encodage cp-1252 :-)
    Précise l'encodage (UTF-8 de préférence) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public static void main(String... args) throws UnsupportedEncodingException {
    		String s = "";
    		s += (char) 129;
    		byte[] buf;
    		buf = s.getBytes("UTF-8");
    		String s2 = new String(buf,"UTF-8");
    		System.out.println(s.compareTo(s2));
    	}
    même sous windows, ça devrait marcher...

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2002
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    Il y a un déjà eu un topic ouvert sur le sujet. Je n'ai plus le lien en tête mais recherche "détection d'encodage" sur le forum, tu devrais le retrouver.

    Ceci dit, si tu codes toi-même l'application, tu dois normalement t'occuper du serveur et du client (ou alors communiquer avec les personnes qui s'occupent du client pour vous mettre d'accord sur l'encodage)
    et non malheureusement, je ne code que la partie cliente, la partie serveur est une librairie qui peut me retourner des chaines avec des encodages différents selon les cas.
    Le topic sur la détection de l'encodage m'interresse mais je ne le trouve pas ...

  11. #11
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut Documentation
    Elle est documentée la librairie côté serveur?

    Si oui les encodages devraient être indiqués selon les différents cas.
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

Discussions similaires

  1. [langage] Comparaison de chaîne
    Par Fastshadow dans le forum Langage
    Réponses: 7
    Dernier message: 05/09/2004, 18h58
  2. comparaison de chaines de caracteres en PLSQL
    Par biozaxx dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/08/2004, 09h41
  3. Réponses: 4
    Dernier message: 05/07/2004, 13h17
  4. Comparaison de chaines
    Par Marc_P dans le forum Linux
    Réponses: 6
    Dernier message: 17/02/2004, 17h04
  5. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 22h41

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