Note: Je remplace ma réponse originale par celle qui est réellement correcte pour ce problème. Désolé pour le malentendu initial.
La ligne suivante désapplique les entités html de votre chaîne.
NSString *A = @"Valore Books";
NSString *B = (NSString *)CFXMLCreateStringByUnescapingEntities(NULL, (CFStringRef)A, NULL);
Je n'ai trouvé aucune fonction équivalente de niveau supérieur, mais les performances devraient être excellentes. Si je lis correctement les docs, vous pouvez passer un CFDictionaryRef comme troisième argument pour spécifier des conversions supplémentaires, mais il semble que cela fasse du bon travail en faisant des standards par lui-même.
Les documents sont here. Notez que c'est probablement une bonne idée de gérer l'encodage quel que soit l'endroit où vous insérez ces chaînes dans votre programme, et pas à chaque fois que vous comparez.
Vous trouverez également une deuxième partie de ce que vous devez prendre en compte. & # 160 n'est pas seulement un espace, c'est un espace non-cassant, que le code ci-dessus convertit en \ 312 au lieu de l'espace standard. Ce sont en fait des caractères séparés dans l'encodage et quand vous faites une comparaison de chaîne, cela échouera.
Peut-être que ce serait plus facile de remplacer # 160 # 32 avec l'aide
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
et en cours d'exécution, puis à travers le unescape.
Il me vient aussi à l'esprit que le CFXMLCreateStringByUnescapingEntities
ne sera pas disponible sur l'iPhone. Here is a link à un exemple qui montre comment faire des conversions similaires sur l'iPhone.
Quel analyseur utilisez-vous? – Morion