Le meilleur moyen d'échapper à des personnages comme le saut de ligne et double-quote dans NSString
Dire que j'ai un NSString (ou NSMutableString) contenant:
I said "Hello, world!".
He said "My name's not World."
Quelle est la meilleure façon de tourner que dans:
I said \"Hello, world!\".\nHe said \"My name\'s not World.\"
Dois-je utiliser manuellement -replaceOccurrencesOfString:withString:
à des caractères d'échappement, ou est-il un moyen plus facile? Ces chaînes peuvent contenir des caractères d'alphabets autres langages.
Comment cela est possible dans d'autres langues avec d'autres classes de chaînes de caractères?
Je ne voudrais certainement pas manuellement utilisation de cette méthode. Il ne serait pas difficile d'écrire une méthode qui prend une série de remplacements tout à la fois.
OriginalL'auteur dreamlax | 2009-02-23
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas qu'il existe une méthode intégrée pour "échapper" à un ensemble particulier de caractères.
Si les caractères que vous voulez échapper est bien défini, je serais probablement s'en tenir à la simple solution que vous avez proposée, de remplacer les occurrences des caractères grossièrement.
Être averti que si la chaîne source a déjà des caractères d'échappement, alors vous voudrez probablement pour éviter un "double échappement". Une façon d'y parvenir serait de passer par et de "ne pas encoder" toute échappé des chaînes de caractères dans la chaîne avant de s'échapper de leur tout nouveau.
Si vous avez besoin de l'appui d'un ensemble de variables de caractères d'échappement, jetez un oeil à la NSScanner méthodes "scanUpToCharactersFromSet:intoString:" et "scanCharactersFromSet:intoString:". Vous pouvez utiliser ces méthodes sur NSScanner pour une croisière à travers une chaîne de caractères, la copie des pièces de la "scanUpTo" dans une mutable chaîne inchangé, et la copie des pièces à partir d'un jeu de caractères particulier seulement après avoir échappé.
OriginalL'auteur danielpunkass
stringByAddingPercentEscapesUsingencoding:NSUTF8StringEncoding
OriginalL'auteur Niklas Alvaeus
Cela permettra d'échapper les guillemets doubles NSString:
De sorte que vous devez être prudent et aussi échapper le caractère d'échappement...
OriginalL'auteur
Je pense que dans ces cas, il est utile d'opérer sur un personnage à la fois, soit en UniChars ou UTF8 octets. Si vous utilisez UTF-8, puis
vis(3)
va faire la plupart du travail pour vous (voir ci-dessous). Puis-je vous demander pourquoi vous voulez échapper à une seule citation à l'intérieur d'une chaîne de caractères entre guillemets? Comment envisagez-vous pour gérer les caractères multi-octets? Dans l'exemple ci-dessous, je suis en UTF-8, l'encodage des caractères 8 bits à l'aide de C-Style octal échappe. Cela peut aussi être annulée par launvis(3)
.OriginalL'auteur Seth Kingsley
Ceci est un extrait de code que j'ai utilisé dans le passé et qui fonctionne très bien:
OriginalL'auteur pheedsta
Ce faire:
Référence: http://simonwoodside.com/weblog/2009/4/22/how_to_really_url_encode/
OriginalL'auteur fursund
Vous pourriez même regarder dans l'aide d'une bibliothèque regex (il y a beaucoup d'options disponibles, RegexKit est un choix populaire). Il ne devrait pas être trop difficile de trouver un pré-écrit regex pour échapper à des chaînes qui gère les cas spéciaux comme les caractères d'échappement.
OriginalL'auteur Marc Charbonneau