L'logging du text en hébreu vers NSUserDefaults renvoie un encoding étrange

Je sauvegarde le text hébreu dans NAMutableArray, puis je l'enregistre dans NSUserDefalts, de cette façon:

numOfWallPosts++; NSSsortingng *tempKeyToStore = [NSSsortingng ssortingngWithFormat:@"wall_post_%d", numOfWallPosts]; // wall_post_%d NSMutableArray *tempArray = [[NSMutableArray alloc] init]; [tempArray addObject:currentOwner]; [tempArray addObject:currentTitle]; [tempArray addObject:currentText]; [tempArray addObject:currentDate]; [tempArray addObject:currentTime]; [tempArray addObject:currentImageURL]; [tempArray addObject:currentWallID]; [self.sharedPrefs setObject:tempArray forKey:tempKeyToStore]; [self.sharedPrefs synchronize]; 

Quand je veux récupérer le text hébreu, je reçois un text comme celui-ci:

 Wall messages: ( "\U05de\U05e2\U05e8\U05db\U05ea", "\U05ea\U05e8\U05d2\U05d9\U05dc \U05e4\U05d9\U05e7\U05d5\U05d3 \U05d4\U05e2\U05d5\U05e8\U05e3", "\U05d0\U05d6\U05e2\U05e7\U05ea \U05ea\U05e8\U05d2\U05d5\U05dc \U05d1\U05e9\U05e2\U05d4 19:05", "27/05/13", "13:16", "http://blabla......", 9 ) 

J'ai essayé de formater le text dans UTF8Ssortingng , et avec NSUTF8SsortingngEncoding et je reçois toujours le text de cette façon.

Puis-je sauvegarder le text correctement ou le réinscrire en hébreu?

EDIT: C'est tellement étrange, bien que le text soit étrange, je le retire et j'obtiens le text correctement. Mais quand je les enregistre dans NSUserDefaults, cela me montre cet étrange enencoding.

 NSSsortingng *tempKeyToStore = [NSSsortingng ssortingngWithFormat:@"wall_post_%d", indexPath.row]; NSMutableArray *tempArray = [[NSMutableArray alloc] init]; NSLog(@"\n\nWall messages: %@", [self.sharedPrefs objectForKey:tempKeyToStore]); tempArray = [self.sharedPrefs objectForKey:tempKeyToStore]; NSSsortingng *tempOwner = [tempArray objectAtIndex:0]; NSLog(@"\n\nOWNER: %@", tempOwner); 

    Si vous utilisez NSLog(@"%@", ...) pour imprimer la description d'un tableau ou d'un dictionary , tous les caractères non-ASCII sont imprimés en utilisant une séquence d'échappement \Unnnn :

     NSArray *a = [NSArray arrayWithObject:@"מערכת"]; NSLog(@"%@", a); 

    Sortie:

     (
        "\ U05de \ U05e2 \ U05e8 \ U05db \ U05ea"
     )
    

    (La raison en est que la méthode de description de NSArray et NSDictionary utilise le format des lists de propriétés ASCII de style ancien , qui, comme son nom l'indique, autorise uniquement les caractères ASCII.)

    Si vous imprimez la description d'une string , tous les caractères sont correctement affichés:

     NSLog(@"%@", [a objectAtIndex:0]); 

    Sortie:

     מערכת
    

    Donc, ce n'est qu'un problème d'affichage.

    Essayez de faire quelque chose comme ceci:

     NSSsortingng *someObject = //your object that needs decode NSSsortingng *decodedObject = [NSSsortingng ssortingngWithCSsortingng:[someObject cSsortingngUsingEncoding:NSUTF8SsortingngEncoding] encoding:NSNonLossyASCIISsortingngEncoding]; NSLog(@"decodedObject = %@", decodedObject); 

    Edit: Il y a probablement quelque chose qui ne va pas dans votre code ailleurs:

     NSMutableArray *tempArray = [[NSMutableArray alloc] init]; [tempArray addObject:@"בדיקה"]; [[NSUserDefaults standardUserDefaults] setObject:tempArray forKey:@"test"]; [[NSUserDefaults standardUserDefaults] synchronize]; NSMutableArray *test2=[[NSUserDefaults standardUserDefaults] objectForKey:@"test"]; NSLog(@"test2: %@",[test2 objectAtIndex:0]); 

    fonctionne bien.

    Eh bien, pouvez-vous postr le code derrière sharedPrefs?

    Quand j'ai essayé d'save un simple hébreu à userdefault cela a très bien fonctionné.

     NSSsortingng *tempKeyToStore = @"KEY"; NSMutableArray *tempArray = [[NSMutableArray alloc] init]; [tempArray addObject:@"שלום שלום"]; [[NSUserDefaults standardUserDefaults] setObject:tempArray forKey:tempKeyToStore]; [[NSUserDefaults standardUserDefaults] synchronize]; 

    Lisez-le plus tard –

     // NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableArray *tempArray = [defaults objectForKey:@"KEY"]; for (NSSsortingng* str in tempArray) { NSLog(@"%@", str); } 

    J'espère que j'ai aidé ..