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

Collection et Stream Java Discussion :

ReplaceAll, caractères spéciaux


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 137
    Par défaut ReplaceAll, caractères spéciaux
    Bonjour,

    J'ai un petit problème, suite à un passage de Json en string, je me suis rendu compte qu'il transformait les caractères & en unicode et bien sûr ça m'emmerde. Donc je voulais remplacer tous les caractères unicodes par leur équivalent lisible pour le commun du peuple .

    Donc j'utilise la méthode replaceAll comme ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = res.replaceAll("\u003c", "<");
    Malheureusement, rien ne se produit, snif...

    Une âme charitable?

    Solution trouvée:

    Après une petite recherche, il ne faut pas utiliser replaceAll mais replace qui n'utilise pas d'expression régulière et donc qui ne bloque pas les caractères spéciaux. On doit réécrire le code comme ce qui suit en n'oubliant pas le \ supplémentaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = res.replace("\\u003c", "<");

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Les caractère d'une String ne peuvent pas être "transformés en unicode" pour la bonne raison que les string sont toujours en unicode (utf-16).

    "\u003c" et "<" sont en fait deux notation différentes pour la même chose.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 137
    Par défaut
    Citation Envoyé par Uther Voir le message
    Les caractère d'une String ne peuvent pas être "transformés en unicode" pour la bonne raison que les string sont toujours en unicode (utf-16).

    "\u003c" et "<" sont en fait deux notation différentes pour la même chose.
    Bien évidemment mais comme je veux recopier ce String dans un fichier texte, ça m'emmerderait de devoir expliquer à tous le monde de ne pas lire \u003c mais <

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Marvelll Voir le message
    Bien évidemment mais comme je veux recopier ce String dans un fichier texte, ça m'emmerderait de devoir expliquer à tous le monde de ne pas lire \u003c mais <
    Tu n'as pas compris ce qu'Uther essayait de te dire. Littéralement, en Java, "\u003c" et "<" sont la même chose. C'est-à-dire que quand tu écris replaceAll("\u003c", "<"), tu écris en fait replaceAll("<", "<"), ce qui ne fait rien. Il fallait doubler le \.

    Je chipote, je chipote, vous allez me dire mais bon ... qui n'essaie rien n'a rien.
    Dans un souci d'optimisation de code, ne savez-vous pas s'il existe une librairie qui implémente déjà votre code "decode()"?
    Je connais quelques bibliothèques de parsing JSON, et elles se chargent toutes de faire ces décodages toutes seules. Par exemple, j'aime bien http://www.json.org/java/. (Attention, la licence exige que cette bibliothèque soit utilisée pour le Bien et non pour le Mal.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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 thelvin Voir le message
    Je connais quelques bibliothèques de parsing JSON, et elles se chargent toutes de faire ces décodages toutes seules. Par exemple, j'aime bien http://www.json.org/java/. (Attention, la licence exige que cette bibliothèque soit utilisée pour le Bien et non pour le Mal.)
    Il doit aussi y avoir les Jakarta Commons qui doivent surement proposer cela...

    a++

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 137
    Par défaut
    J'ai pris la bibliothèque Google json - google-json (ou gson). Elle est pas mal du tout et elle fait tout ce que je veux faire pas comme json-lib (à moins que ce soit moi qui n'ait rien compris).

    Je mets résolu, et merci à tout le monde .

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


    Pour un code plus générique, tu peux utiliser les expressions régulières justement :
    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
    23
    	public static String decode(String source) {
    		// On recherche tous les éléments unicode :
    		Pattern pattern = Pattern.compile("\\\\u([0-9a-fA-F]{4})");
    		Matcher matcher = pattern.matcher(source);
    		if (matcher.find()) {
    			// Si on en trouve au moins un, on doit créer un StringBuffer
    			// où l'on copiera la nouvelle chaine :
    			StringBuffer sb = new StringBuffer(source.length());
    			do {
    				// Puis à chaque fois que l'on trouve le bloc unicode :
    				// On récupère la valeur unicode du caractère :
    				int codePoint = Integer.parseInt(matcher.group(1), 16);
    				String value = new String(Character.toChars(codePoint));
    				matcher.appendReplacement(sb, Matcher.quoteReplacement(value));
    			} while (matcher.find());
    			// On recopie la fin de chaine :
    			matcher.appendTail(sb);
    			// Et on retourne la nouvelle chaine
    			return sb.toString();
    		}
    		// Aucune modif à faire : on retourne la chaien tel quel :
    		return source;
    	}
    a++

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 137
    Par défaut
    Super, merci beaucoup, exactement ce que je voulais.

    Merci pour votre réponse très rapide.


    Je chipote, je chipote, vous allez me dire mais bon ... qui n'essaie rien n'a rien.
    Dans un souci d'optimisation de code, ne savez-vous pas s'il existe une librairie qui implémente déjà votre code "decode()"?

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

Discussions similaires

  1. caractères spéciaux
    Par mat10000 dans le forum Flash
    Réponses: 16
    Dernier message: 23/10/2003, 13h22
  2. Où trouver la liste des caractères spéciaux?
    Par gamez dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2003, 17h54
  3. Transformation XSL et caractères spéciaux
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 4
    Dernier message: 28/04/2003, 10h38
  4. [Sybase] filtre sur caractères spéciaux
    Par montelieri dans le forum Sybase
    Réponses: 4
    Dernier message: 07/04/2003, 16h49
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23

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