1

我将希伯来文本保存到 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
)

我尝试将文本格式化为UTF8String, 和 with ,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);
4

3 回答 3

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

工作正常。

于 2013-05-27T13:54:48.390 回答
1

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

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

输出:

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

(原因是 使用旧式 ASCII 属性列表description格式的方法NSArray,顾名思义,它只允许使用 ASCII 字符。)NSDictionary

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

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

输出:

מערכת

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

于 2013-05-27T14:59:39.107 回答
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);
}

希望我帮助..

于 2013-05-27T14:13:45.793 回答