2013-05-27 31 views
1

我节省希伯来经文NAMu​​tableArray,然后我将它保存到NSUserDefalts,这种方式:保存希伯来文,以恢复NSUserDefaults的怪编码

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 
) 

我试图在文本格式UTF8String,并与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); 

回答

1

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

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

输出:

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

(其理由是,NSArrayNSDictionarydescription方法使用Old-Style ASCII Property Lists格式, ,正如其名称所示,只允许ASCII字符。)

如果打印的描述中,正确显示所有字符:

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

输出:

 
מערכת 

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

+0

如果我想在nslog中正确显示文本,我需要将文本编码为ascii? –

+0

@IdanMoshe:我只是使用一个循环来NSLog数组中的所有条目。 –

1

试着做这样的事情:

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

工作正常。

+0

“不完整的通用字符名称” –

+0

您不需要在字符串内写入unicode。它应该像'NSString * someObject = object;'我编辑了上面的解决方案。 – Segev

+0

感谢您的回答,请参阅我更新的帖子。 –

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

希望我帮..

+0

感谢您的回答,请参阅我更新的帖子。 –

+0

我认为这只是打印问题。与nsuserdefaults无关。 –

+0

尝试打印一个简单的数组它将起同样的作用 –