将 NSString 转换为 NSData 是不是会强制使用尾随字节?
Posted
技术标签:
【中文标题】将 NSString 转换为 NSData 是不是会强制使用尾随字节?【英文标题】:Does converting NSString to NSData force a trailing byte?将 NSString 转换为 NSData 是否会强制使用尾随字节? 【发布时间】:2012-12-14 18:09:47 【问题描述】:这是对这个错误答案的回应: https://***.com/a/7894952/192819
是否像这样转换 NSString:
NSString *str = @"teststring";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
强制一个尾随 \0 字节,这意味着
-[NSJSONSerialization:JSONObjectWithData:]
除非你删除它,否则其他人会失败。
【问题讨论】:
哈!您肯定已经从本质上是针对不正确答案的扩展评论(恰好适合问答格式)中获得了大量代表。好吧,我不会吝啬你的。 :) 【参考方案1】:不,它没有。看这个例子:
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);
试一试,然后在取消注释的“不要这样做”行的情况下试一试。你会看到没有问题。
【讨论】:
很高兴看到人们再次回答自己的问题。 @CodaFi 是坏事吗? 不,事实上,FAQ 鼓励这样做。只是有些人认为这是作弊,并在它发生时开始疯狂地投票。 我本来希望因为我专门发布它来纠正另一个问题中完全不正确的答案,这不会被认为是一件坏事。无赖。以上是关于将 NSString 转换为 NSData 是不是会强制使用尾随字节?的主要内容,如果未能解决你的问题,请参考以下文章
将 NSData 转换为 NSString 并再次转换为 NSData?