NSString在执行NSUTF8StringEncoding时返回NULL

时间:2013-02-26 10:14:09

标签: objective-c xcode nsstring nsstringencoding

以下是我的代码

NSString *res = [valueArray valueForKey:@"key"];
NSData *newdata=[res dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
res=[[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding];
nameTxt.text = [NSString stringWithFormat:@"%@",res]; // Assigning to textfield

这很正常。 但有时它返回NULL数据,大多数情况下,当字符串内容为大数据时会发生。

任何人都知道为什么会这样?

1 个答案:

答案 0 :(得分:2)

NSString *res = [valueArray valueForKey:@"key"];

这很有趣:在名为valueForKey:的变量上使用...Array。相反似乎是一本字典?

NSData *newdata = [res dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

从字符串创建原始UTF8编码数据始终有效:无需allowLossyConversion

res = [[NSString alloc] initWithData:newdata encoding:NSNonLossyASCIIStringEncoding];

将UTF8编码的原始数据转换为ASCII仅在UTF8不包含非常受限制的ASCII范围内的任何字符时才起作用。否则返回nil

这似乎是这个混淆代码的唯一原因:过滤掉非ASCII字符串。否则转换没有丝毫意义。