【问题标题】:Does converting NSString to NSData force a trailing byte?将 NSString 转换为 NSData 是否会强制使用尾随字节?
【发布时间】:2012-12-14 18:09:47
【问题描述】:

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

是否像这样转换 NSString:

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

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

-[NSJSONSerialization:JSONObjectWithData:] 

除非你删除它,否则其他人会失败。

【问题讨论】:

  • 哈!您肯定已经从本质上是针对不正确答案的扩展评论(恰好适合问答格式)中获得了大量代表。好吧,我不会吝啬你的。 :)

标签: objective-c cocoa


【解决方案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 鼓励这样做。只是有些人认为这是作弊,并在它发生时开始疯狂地投票。
  • 我本来希望因为我专门发布它来纠正另一个问题中完全不正确的答案,这不会被认为是一件坏事。无赖。
猜你喜欢
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多