Guillemets non reconnus

HerveHerve Membre
août 2018 modifié dans Objective-C, Swift, C, C++ #1

Bonjour

Je sais que la question a été maintes fois posée, mais les solutions lues un peu partout ne fonctionnent pas!!

Je cherche à détecter des guillemets dans un NSString pour les supprimer.
J'ai essayé tous les caractères unichar de cette façon :

        //verif caractères
        if ([aString containsString:@"\u201C"])NSLog(@"u201C");
        if ([aString containsString:@"\u201D"])NSLog(@"u201D");
        if ([aString containsString:@"\""])NSLog(@"contient guillemets");
        if ([aString containsString:@"\u02BA"])NSLog(@"u02BA");
        if ([aString containsString:@"\u2033"])NSLog(@"u2033");
        if ([aString containsString:@"\u3003"])NSLog(@"u3003");
        if ([aString containsString:@"\u05F4"])NSLog(@"u05F4");
        if ([aString containsString:@"\u030B"])NSLog(@"u030B");
        if ([aString containsString:@"\u030E"])NSLog(@"u030E");
        if ([aString containsString:@"\u2018"])NSLog(@"guillemet 2018");
        if ([aString containsString:@"\u2019"])NSLog(@"u2019 apostrophe");      //OUI
        //seule l'apostrophe fonctionne!

Déjà pour l'apostrophe, j'ai dû utiliser @\u2019 et non @\', mais aucune norme ne fonctionne pour le guillemet. Le @\u0022, qui serait le caractère universel, est rejeté par le compilateur (en rouge!!)

Z'auriez pas une idée s'vous plait????? Merci.

Réponses

  • LarmeLarme Membre
    août 2018 modifié #2

    ~~Il compile ton code ?
    Tu devrais utiliser @"\"".
    En fait, il semble manquer à chaque fois des guillemets pour tes strings. C'est @"monString", avec @ + " + string à utiliser + ".~~

    Édit:
    Rien dit, mais utilise la balise code, car du coup, j'ai cru que ce n'était pas ça.
    Es-tu sûr que ton NSString contient des guillemets? Pourrais-tu nous donner sa valeur ? Pourrais-tu également le printer, copier/coller le guillemet et regarde s'il s'agit bien du même et pas par exemple ou et pas "...

  • Joanna CarterJoanna Carter Membre, Modérateur
    août 2018 modifié #3

    @Larme a dit :
    Rien dit, mais utilise la balise code, car du coup, j'ai cru que ce n'était pas ça.

    Je l'ai corrigé B)

    Et, Hervé, pour les balises de code -

    ```
    … du code
    ```

  • @Herve a dit :
    Déjà pour l'apostrophe, j'ai dû utiliser @"\u2019" et non @"\'", mais aucune norme ne fonctionne pour le guillemet. Le @\u0022, qui serait le caractère universel, est rejeté par le compilateur (en rouge!!)

    Normalenet @"'" aurait suffit, pas besoin de l'échapper.
    Tu n'aurais pas deux simple quote (on va dire « apostrophe ») à la suite plutôt que des double quotes?

  • HerveHerve Membre
    août 2018 modifié #5

    Merci pour vos posts

    Merci Larme en particulier, mais j'ai bien essayé auparavant ceci :
    "'"
    "\'"
    Normalement, d'après ce que j'ai pu lire ailleurs, cela aurait dû marcher. Si je fais NSLog(@ " ' ' ' "); j'ai bien trois apostrophes en console par exemple. Idem pour "\"" pour les guillemets. Mais pour les fonctions de type "containsString" ou "componentsSeparatedByString:" , cela ne veut pas fonctionner. Pourquoi donc???

    Le message d'erreur de XCode (que je croyais compiler mon code vu ce que je me souvenais avoir lu dans des livres...) est :
    "Character '"' cannot be specified by a universal character name"
    lorsque je rentre @\u0022. C'est dommage car d'après la doc, ce serait le caractère le plus universel (voir ici) :
    https://www.unicode.org/charts/PDF/U0000.pdf

    Merci en tous les cas pour vos éléments de réponse. Cherchons encore!! Tout ceci est somme toutes très étonnant.

  • HerveHerve Membre
    août 2018 modifié #6

    Nouvel essai avec une idée lue sur StackOverflow :

            NSString *stringTest = [NSString stringWithFormat:@"%C", 0x0022];
            if ([aString containsString:stringTest])NSLog(@"ya 0022");
            NSLog(@"test : %@",stringTest);
    

    Le "test" s'imprime bien, j'ai bien un guillemet en console, mais le caractère n'est pas reconnu : "ya 0022" ne s'affiche pas.

  • Question :
    Que contient aString ?

  • HerveHerve Membre
    août 2018 modifié #8

    aString

    est tout simplement une autre NSString : la phrase d'un texte. Ce code intervient lorsque je découpe en mots les phrases d'un texte.
    (les codes que je montre sur cette page sont des codes de test console)

  • HerveHerve Membre
    août 2018 modifié #9

    Je viens de faire le test suivant :
    Je crée une NSString avec des guillemets,
    NSString *aString = @"Test de \" recherche\" de guillemets et d'apostrophes";
    et cette fois,
    if ([aString containsString:@"\""])
    fonctionne, ainsi que

    NSString *stringTest = [NSString stringWithFormat:@"%C", 0x0022];
    if ([aString containsString:stringTest])NSLog(@"0022");
    

    (Pas les autres)

    La NSString du logiciel quant à elle vient d'une NSAttributedString.
    monAttributedString.string
    Pensez-vous que le problème puisse venir de là??

  • Non.
    J'aurais plutôt tendance à dire que ce ne sont pas les mêmes guillemets.
    Du style " vs vs , comme je l'ai signalé précédemment. Voire même '' (deux quotes).
    Pourrais-tu trouver le range des guillemets qui posent problème, faire un substringWithRange: dessus et les comparer avec @"\"" par exemple ?

  • Merci Larme pour ton post. Ce que tu proposes ressemble à ce que j'ai fait avec toutes les configurations possible de guillemets comme montré plus haut. A vrai dire, d'autres caractères comme les parenthèses posent problème aussi.

    Je vais reprendre cela demain, je vais relire la doc.

    Merci encore.

  • HerveHerve Membre
    octobre 2018 modifié #12

    J'ai fini par résoudre ainsi le problème :
    NSCharacterSet *ponctuations = [NSCharacterSet characterSetWithCharactersInString:[NSString stringWithFormat:@"%C%C%C%C%C", 0x0022,0x00AB,0x00BB,0x201C,0x201D]]; NSArray* phrases = [texte componentsSeparatedByCharactersInSet:ponctuations];

    Je suis incapable de vous dire lequel de ces différents guillemets est reconnu par NSString (et il y en a d'autres!! voir le lien...)
    http://www.fileformat.info/info/unicode/char/search.htm?q="&preview=entity

    Comment marquer [Résolu] dans le titre déjà??

Connectez-vous ou Inscrivez-vous pour répondre.