我正在将希伯来语文本保存到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
和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);
答案 0 :(得分: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]);
工作正常。
答案 1 :(得分:1)
如果您使用NSLog(@"%@", ...)
打印数组或词典的说明,则使用\Unnnn
转义打印所有非ASCII字符序列:
NSArray *a = [NSArray arrayWithObject:@"מערכת"];
NSLog(@"%@", a);
输出:
( "\U05de\U05e2\U05e8\U05db\U05ea" )
(原因是description
和NSArray
的{{1}}方法
使用Old-Style ASCII Property Lists格式,
正如名称所示,它只允许使用ASCII字符。)
如果您打印字符串的说明,则会正确显示所有字符:
NSDictionary
输出:
מערכת
所以这只是一个显示问题。
答案 2 :(得分: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);
}
希望我帮助..