保存希伯来语文本NSUserDefaults返回奇怪的编码

我将希伯来文保存到NAMutableArray,然后将其保存到NSUserDefalts,如下所示:

numOfWallPosts++; NSString *tempKeyToStore = [NSString stringWithFormat:@"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]; 

当我想要得到希伯来语的文本,我得到这样的文字:

 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 ) 

我试图用NSUTF8StringEncoding格式化文本,用NSUTF8StringEncoding格式化文本,我仍然用这种方法得到文本。

我可以用正确的方式保存文本还是将其编码回适当的希伯来文?

编辑:这是如此奇怪,虽然文字保存奇怪,我把它拉回来,我得到正确的文字。 但是当我将它们保存到NSUserDefaults,它显示我这个奇怪的编码。

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

如果使用NSLog(@"%@", ...)打印数组字典的描述,则所有非ASCII字符都使用\Unnnn转义序列打印:

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

输出:

 (
    “\ U05de \ U05e2 \ U05e8 \ U05db \ U05ea”
 )

(原因是NSArrayNSDictionarydescription方法使用旧式ASCII属性列表格式,正如名称所示,它只允许ASCII字符)。

如果您打印string的描述,则所有字符都正确显示:

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

输出:

 מערכת

所以这只是一个显示问题。

尝试做这样的事情:

 NSString *someObject = //your object that needs decode NSString *decodedObject = [NSString stringWithCString:[someObject cStringUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding]; NSLog(@"decodedObject = %@", decodedObject); 

编辑:有可能是你的代码其他地方有什么问题,因为这:

 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]); 

工作正常。

那么,你可以把代码放在sharedPrefs后面吗?

当我试图保存一个简单的希伯来语userdefault它工作得很好。

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

稍后阅读 –

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

希望我帮助..