17

这是对这个错误答案的回应: https ://stackoverflow.com/a/7894952/192819

是否像这样转换 NSString:

NSString *str = @"teststring";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

强制尾随 \0 字节,这意味着

-[NSJSONSerialization:JSONObjectWithData:] 

除非您将其删除,否则其他人将失败。

4

1 回答 1

31

不,不是的。看这个例子:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                      @"v1", @"k1", 
                      @"v2", @"k2",
                      nil];
NSLog(@"dict=%@", dict);

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:nil];    

NSString *jsonAsString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

NSData *jsonDataFromString = [jsonAsString dataUsingEncoding:NSUTF8StringEncoding];

// DO NOT DO THIS:
// jsonDataFromString = [jsonDataFromString subdataWithRange:NSMakeRange(0, [jsonDataFromString length] - 1)];

NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:jsonDataFromString options:0 error:nil];
NSLog(@"jsonObject=%@", jsonObject);

尝试一下,然后在未注释的“不要这样做”行中尝试。你会看到没有问题。

于 2012-12-30T00:05:50.297 回答