Iphone NSMutableArray或NSMutableDictionary中的阿拉伯文字符串

Iphone NSMutableArray或NSMutableDictionary中的阿拉伯文字符串,iphone,objective-c,ios,Iphone,Objective C,Ios,向NSMutableArray或NSMutableDictionary添加阿拉伯字符串时出现问题 例如: NSMutableDictionary *data = [[NSMutableDictionary alloc]init]; [data setObject:@"فرسان" forKey:@"name"]; NSLog(@"%@",data); 输出: 2012-01-18 21:55:05.646 aa[367:207] { name = "\U0641\U0631\U063

向NSMutableArray或NSMutableDictionary添加阿拉伯字符串时出现问题

例如:

NSMutableDictionary *data = [[NSMutableDictionary alloc]init];
[data setObject:@"فرسان" forKey:@"name"];

NSLog(@"%@",data);
输出:

2012-01-18 21:55:05.646 aa[367:207] {
    name = "\U0641\U0631\U0633\U0627\U0646";
}
2012-01-18 14:17:42.498 Animal[62723:f803] {
    name = "\U0641\U0631\U0633\U0627\U0646";
}
2012-01-18 14:17:42.500 Animal[62723:f803] فرسان
我的问题正是我将此数据保存到sqlite[data objectForKey:@name]其保存的\U0641\U0631\U0633\U0627\U0646,当获取数据以将其放入UILabel或类似文件时,文本为\U0641\U0631\U0633\U0627\U0646

有什么帮助吗?谢谢各位:

- (void)SaveMessage {

NSMutableDictionary *TableProperties = [[NSMutableDictionary alloc]init];
[TableProperties setObject:@"INSERT" forKey:@"Operation"];
[TableProperties setObject:@"savedmessages" forKey:@"tableName"];
NSString *string = [[NSString alloc]initWithFormat:@" %@",MessageBox.text];
[TableProperties setValue:string forKey:@"message"];

NSString *msgResult;
NSArray *result = [[DatabaseFunctions database] DataBaseOperation:TableProperties];
if ([[result objectAtIndex:0] isEqualToString:@"Done"]) 
    msgResult = @"تم حفظ الرسالة بنجاح";
else
    msgResult = @"لم تت العملية بنجاح حاول لاحقا";

UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle:@"حفظ الرسالة" 
                      message:msgResult 
                      delegate:self 
                      cancelButtonTitle:@"موافق" 
                      otherButtonTitles:nil, nil ];
[alert show];
}


}

使用%@记录对象时,NSLog会向该对象发送描述消息并打印结果字符串

NSDictionary通过以安全格式编码其键和值,并使用\U代码转义非ASCII字符来响应描述消息

如果将阿拉伯字符串直接传递给NSLog,它将只打印字符串,而不打印转义码:

NSMutableDictionary *data = [[NSMutableDictionary alloc]init];
[data setObject:@"فرسان" forKey:@"name"];

NSLog(@"data = %@",data);
NSLog(@"string = %@", [data objectForKey:@"name"]);
输出:

2012-01-18 21:55:05.646 aa[367:207] {
    name = "\U0641\U0631\U0633\U0627\U0646";
}
2012-01-18 14:17:42.498 Animal[62723:f803] {
    name = "\U0641\U0631\U0633\U0627\U0646";
}
2012-01-18 14:17:42.500 Animal[62723:f803] فرسان
如果您不喜欢NSDictionary响应描述的方式,则必须编写自己的方法将字典格式化为字符串,并使用它记录字典

使现代化 我已经看过了您发布的与sqlite对话的源代码。问题是您正在使用%@格式说明符将值数组[TableProperties allValues]转换为字符串。这会将description方法发送到NSArray,后者返回一个字符串。与NSDictionary一样,NSArray以安全格式格式化描述字符串,使用\U代码转义非ASCII字符


您需要编写自己的方法,该方法接受数组并将其转换为字符串,并且不会转义特殊字符。但它需要转义引号。

相关:看起来没有问题:NSLog只是显示代码点,可能与ASCII兼容。请尝试NSLog@%@[data objectForKey:@name]。如果输出正确,这只是NSDictionary的一个特性,您可以安全地忽略它。此外,不要以大写字母开始本地实例变量。这是一个糟糕的做法。你需要编辑你的问题,以显示将数据保存到SQLite的代码和从SQLite加载数据的代码。非常好的解释。这帮了大忙。