保存希伯来语文本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” )
(原因是NSArray
和NSDictionary
的description
方法使用旧式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); }
希望我帮助..