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

Applets Java Discussion :

Supprimer ou interpréter caractères unicode


Sujet :

Applets Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 29
    Par défaut Supprimer ou interpréter caractères unicode
    Bonjour,

    Je dispose d'un applet dont le but est de se connecter à un serveur et de relayer le flux (du texte). Mais il arrive à ce serveur d'envoyer des caractères unicode m'empêchant de parser la réponse. Ce caractère en question s'appelle White Smiling Face code \u263A.

    Le serveur répond quelque chose comme :
    :☺ACTION UneAction☺
    Le code :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(lineSplit[3].startsWith(":"?"ACTION")) {

    Le caractere se trouvant à la place du "?". J'ai sillionner pas mal de fonction et bidouillage, mais aucun ne semble combler mon besoin. Comment rendre valide cette condition en traitant ou supprimant ce caractere de la chaine ?

    Je précise que je n'utilise pas java.awt dans ce projet.

    D'avance, Merci

  2. #2
    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
    Tout simplement


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(lineSplit[3].startsWith(":\u263aACTION"))

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 29
    Par défaut
    Merci pour votre réponse.

    Malheureusement, j'ai déjà testé cette syntaxe. et le programme ne rentre pas dans la condition. J'ai pourtant lu que java est censé comprendre les caractères Unicode. Est-ce que je me suis trompé de caractère ? Peut être.

    En fait, lorsque que je println() la ligne contenant ce caractère, j'ai dans la console java un espace blanc, dans la console crosoft le White smiling face. J'suis parti du principe que du fait de la différence entre les deux consoles, il ne s'agissait pas d'un caractères normal.

    Ce caractère n'a pas de code ASCII. J'en ai donc déduit que c'était unicode. Me suis-je trompé de raisonnement ? Que faire pour me débarrasser de ce caractère ?

  4. #4
    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
    par définition, tout caractère est unicode! Votre serveur, il envoie son texte dans quel encodage? Utilisez vous bien le bon encodage pour la lecture par rapport à celui utilisé par le serveur?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 29
    Par défaut
    Le serveur utilise me semble-t-il l'encodage UTF-8. Pour ce qui est de ce que j'utilise, euh

    Je ne savais même pas que l'ont pouvait modifier l'encodage utilisé, je n'ai pas vu de chose dans ce sens dans les documents que j'ai pu lire, Ou bien, je n'y ai pas prêté attention. De ce fait, je pense utilisé l'encodage par défaut de java.

    Pensez-vous que je devrais utiliser quelque chose comme :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    System.setProperties( "file.encoding", "UTF-8" );

    Edit : Je viens d'essayer ceci :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private String charset = "UTF-8";
    sr = new BufferedReader(
                        new InputStreamReader(socket.getInputStream(), charset));

    Modification egalement effectué sur le Writer, mais ce caractere s'affiche toujours de la même maniere sans être intercepté.

    Ces lignes reçu, sont transmise à javascript ensuite. De ce côté, les caractères n'apparaissent pas... Ni de Smiling face, ni d'espacement, comme s'il n'existaient pas.

  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
    C'est une bonne pratique que de systématiquement préciser quel encodage vous voulez utiliser quand vous travaillez avec des Reader en java. Tous les constructeurs associés au reader prenent en paramètre l'encodage à utiliser. Suffit de regarder la javadoc

    http://javasearch.developpez.com/j2s...lang.String%29

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 29
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    C'est une bonne pratique que de systématiquement préciser quel encodage vous voulez utiliser quand vous travaillez avec des Reader en java. Tous les constructeurs associés au reader prenent en paramètre l'encodage à utiliser. Suffit de regarder la javadoc

    http://javasearch.developpez.com/j2s...lang.String%29
    Oui, tout à fait. Mais sachant que je ne comprends pas systématiquement l'anglais, et que les explications en fr sont pas forcément clair, et que, comme si ca ne suffisait pas, c'est la première fois que j'utilise java.

    Ceci étant dit, comme j'ai édité le précedent post, celà n'a pas l'air de changer chose. J'ai toujours le caractère en console invite de commande, le caractère blanc dans la console java, et rien du tout en html !

    Je me suis également rendu compte qu'un println("\u263a"); affichait "\u263a".

    Edit 6:35 : J'ai finalement réussi à envoyer sur le serveur avec le charset de l'utilisateur, et lire la socket en utf-8. mes incompatibilité d'accent sont résolu. Ceci étant dit, j'ai toujours ce problème de caractère, qui maintenant affiche un carré sous la console invite de commande (j'ai changer l'encodage en tapant "chcp 1252", m'affiche en revanche toujours un caractère blanc qui n'est pas un inspace dans la console java.

  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
    Citation Envoyé par OnaStick Voir le message
    Je me suis également rendu compte qu'un println("\u263a"); affichait "\u263a".
    Êtes vous sûr de ne pas plutot avoir écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("\\u263a");
    Ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("\u263a");
    affiche bien le smiley.

    Ceci étant dit, j'ai toujours ce problème de caractère, qui maintenant affiche un carré sous la console invite de commande (j'ai changer l'encodage en tapant "chcp 1252"
    que je sache l'encodage 1252 ne gère pas ce caractère. Mettez votre console et java en utf-8 et vous n'aurez aucun souci. Maintenant la gestion de la console sous windows c'est assez bordelique je pense

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 29
    Par défaut
    Alors, je vais vous résumer mon cheminement de la nuit, enfin, je vais essayé.

    J'ai creusé du côté de l'encodage pendant un certain temps sans succès. Je me suis ensuite tourné vers les charset, mais ca donnait pas grand chose. J'ai donc reprit mon travail à partir d'une classe vierge. J'ai donc refait ma socket, le BufferedReader en précisant UTF-8, j'ai changé le BufferedWriter pour un PrintWriter.
    A partir de là, j'avais toujours ce caractère mysterieux envoyé par le serveur. J'avais lu quelque part que l'on pouvait utiliser des caractères spéciaux de ce genre directement dans le code, ce que j'ai essayé sans succès.
    Mais après avoir changé l'encodage de la console windows, il est apparu un carré, qui indique comme vous l'avez dit que cette encodage ne supportait pas ce caractère.
    Par curiosité, j'ai copier/coller ce caractere dans mon code. celui me donnait un espace blanc. désespéré, j'essaye tout de même la condition et là, elle fonctionne. Ca fonctionne, certes, mais c'est un peu moche.

    Pour ce qui est de la console java, ou change-t-on le charset ?

  10. #10
    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
    java détermine au démarrage le charset de System.out en fonction de la config de l'os. Le charset "de la console" c'est l'OS qui le gère. Sous linux, avec gnome-terminal, j'ai un menu "Terminal -> définir le codage des caractères". Mais j'ignore comment ça se passe sous windows.

    Pour ce qui est de votre caractère spécial, comme on ne sais pas du tout avec quel genre de serveur vous discuter , impossible de savoir si c'est "normal"

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Août 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 29
    Par défaut
    Ah oui, la précision aurai pu être pratique :oops:

    Je peux déjà vous dire que oui, il est normal pour la simple raison que le serveur en question est un serveur IRC et que ce caractère apparaît sur tous les serveurs (tout au moins ceux sous UnrealIRCd que j’ai testé).

    Une ligne d'un simple message sur un canal donne :

    :Weak|End!Weakness@45247021.AA707A78.D9AB5A9C.IP PRIVMSG #Salon :Le message
    Le message qui me pose problème est celui ci :

    :Weak|End!Weakness@45247021.AA707A78.D9AB5A9C.IP PRIVMSG #World :?ACTION se sauve?
    Ce message correspond au "/me" sur IRC. Les points d'interrogations représente les caractères mysterieux.

    Voilà ce qu'on peut lire à propos dans la RFC du protocole :

    Aucun jeu de caractères n'est imposé. Le protocole est basé sur un jeu de caractère de huit (8) bits, qui forment un octet ; cependant, certains codes sont utilisés en tant que codes de contrôle, et agissent comme délimiteurs de messages.
    Mais aucune info supplémentaire...

    Edit : Rectification. Je viens de tomber sur une RFC annexe ou ils parlent de ces fameux delimiter. En l'occurence, il s'agit du caractere \001. J'ai donc fait ceci :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    if (lineSplit[3].startsWith(":\001ACTION ")) {

    Et ca fonctionne parfaitement.

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

Discussions similaires

  1. [JDOM] caractère unicode de fin de ligne
    Par iceman dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 31/03/2009, 04h15
  2. Réponses: 4
    Dernier message: 14/10/2005, 10h15
  3. Supprimer le premier caractère d'une chaine de caractères
    Par Droïde Système7 dans le forum Langage
    Réponses: 2
    Dernier message: 30/09/2005, 12h13
  4. Réponses: 4
    Dernier message: 24/08/2005, 19h40
  5. [CR8.5] caractères unicode
    Par Milou79 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 03/09/2004, 12h42

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