2010-12-03 9 views
1

Je reçois des données JSON et je les convertis en dictionnaire. Impression des résultats Dictionnaire dans la description suivante:NSDictionary objectForKey/valueForKey déjà formaté?

Objekt: { 
author = blub; 
authorUID = 28084; 
date = "31.07.10"; 
numVotes = 0; 
postUID = 30931; 
text = "... <b>Atemtest</b> durchf\U00c3\U00bchren m\U00c3\U00bcssen?..."; 
timestamp = 1280585555;} 

Ce que je veux est de remplacer les occurences de par exemple \U00c3\U00bc avec \U00bc.

Voilà où je suis coincé. [dictionary objectForKey:@"text"] renvoie une chaîne déjà formatée comme <b>Atemtest</b> durchführen zu müssen?

valeurForKey se comporte de la même manière.

+0

Une solution rapide était de faire un décodage UTF8 côté serveur ... mais j'aimerais quand même savoir comment on ferait ça du côté de l'iphone. – Infinite

Répondre

1

Les deux sorties sont simplement des représentations différentes du même objet sous-jacent NSString dans le dictionnaire, qui je crois est déjà recodé comme UTF-16 à partir de ce qu'il était dans le JSON.

Comme décrit par la réponse de Peter Hosey à this related question, la sortie de NSDictionary code la chaîne de sorte qu'elle se conforme à la représentation textuelle attendue d'un plist. Dans votre cas, il semble que vous ne souhaitiez probablement pas retourner à cette représentation (bien que si vous jetez un coup d'oeil à la réponse acceptée à la question ci-dessus), mais faites la substitution directement dans le NSString, comme ceci:

NSString* oldStr = @"\u00c3\u00bc"; 
NSString* newStr = @"\u00bc"; 

NSString* text = [dictionary objectForKey:@"text"]; 
NSString* replaced = [text stringByReplacingOccurrencesOfString:oldStr withString:newStr]; 

les \uXXXX séquences dans le code source est converti en les caractères UTF-16 pertinentes dans les NSString constantes, et celles-ci sera alors adaptée et substitué dans la cible.

+0

c'est mon problème, en utilisant le stringByReplacingOccurences n'a pas fonctionné. Mais je pense que la question répond à la question connexe. – Infinite