2009-05-26 9 views
1

J'ai le code suivant:NSArray de problème d'encodage URL

NSURL *baseURL = [NSURL URLWithString:@"http://www.baseurltoanxmlpage.com"]; 
NSURL *url = [NSURL URLWithString: @"page.php" relativeToURL:baseURL]; 
NSArray *array = [NSArray arrayWithContentsOfURL:url]; 

Si la page XML est la suivante:

<array><dict><key>City</key><string>Montreal</string></dict></array> 

Le tableau renvoie bien. Toutefois, si le fichier XML est la suivante:

<array><dict><key>City</key><string>Montréal</string></dict></array> 

Le tableau renvoie null. Je suppose que cela a quelque chose à voir avec le caractère spécial "é". Comment pourrais-je m'occuper de ces personnages? La page XML est générée avec PHP. La fonction utf8_encode() fait retourner le tableau mais je ne sais pas comment gérer le caractère "é" encodé.

Voici la solution de travail:

NSString *stringArray = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 
NSArray *array = [stringArray propertyList]; 

NSLog(stringArray); 
NSLog(@"%@", array); 
NSLog([[[array objectAtIndex:0] valueForKey:@"City"] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]); 

Les premières impressions du journal le "é" bien. Dans le deuxième journal, il est codé et est imprimé comme "\ U00e9". Dans le 3ème journal, il est décodé et imprimé comme "é" (ce que je cherchais).

+0

lieu de 'encodage: 4', vous pouvez utiliser' encodage: NSUTF8StringEncoding'. Vous ne savez jamais si Apple pourrait changer cela à quelque chose d'autre. Voir http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/doc/c_ref/NSStringEncoding pour les types NSStringEncoding. –

+0

Fixé. Merci beaucoup l'homme. – samvermette

Répondre

2

Comme vous l'avez dit, vous devez retourner un UTF8- ou d'un document XML UTF16 codé. Ensuite, créez des objets NSString en utilisant la méthode stringByReplacingPercentEscapesUsingEncoding:, en utilisant l'encodage approprié.

+0

Comme je l'ai écrit dans mon post mis à jour, le NSString obtient maintenant la chaîne bien. Cependant, lorsque je le renvoie en tant que propriété, le caractère spécial est perdu. – samvermette

+0

On dirait que j'ai oublié ce que l'encodage était :( Merci beaucoup pour votre aide Alex – samvermette

0

regardant la documentation NSString pour :propertyList, nous voyons:

  • Parses the receiver as a text representation of a property list, returning an NSString, NSData, NSArray, or NSDictionary object, according to the topmost element.

Un property list est un document spécifique à Apple qui stocke des représentations de NSString, NSDictionary, NSArray, et d'autres types de base en format XML. Ces fichiers .plist sont généralement utilisés pour stocker les préférences ou les paramètres d'application.

Cette liste de propriétés au format XML documents est codé en UTF-8, par défaut. Lorsque vous transformez votre NSString en un élément de liste de propriétés, l'encodage du caractère "é" le remplace par le UTF-8 Unicode character "\U00e9".

+0

Votre réponse précédente était d'utiliser la stringByReplacingPercentEscapesUsingEncoding: méthode.Par conséquent, je suppose que je fais d'abord [NSString stringFromContentsOfURL] puis stringByReplacing ... Mais comment puis-je transférer cette chaîne dans un tableau? Je pensais que propertyList: était le chemin à parcourir, mais je ne peux pas trouver d'autre méthode qui fait cela. – samvermette

+0

Regardez dans NSArray et NSMutableArray si vous voulez stocker des objets NSString dans un tableau. Un NSString lui-même n'est pas un tableau (du moins, pas de la manière dont vous le pensez probablement). –

Questions connexes