将NSString转换为NSData会强制使用尾随字节吗?

jps*_*ain 17 cocoa objective-c

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

转换NSString是这样的:

NSString *str = @"teststring";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

强制尾随\ 0字节,表示

-[NSJSONSerialization:JSONObjectWithData:] 
Run Code Online (Sandbox Code Playgroud)

除非你删除它,否则其他人将失败.

jps*_*ain 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);

Run Code Online (Sandbox Code Playgroud)

尝试一下,然后尝试使用"DO DO DO THIS"行取消注释.你会看到没有问题.

  • 不,事实上,它在FAQ下受到鼓励.只是有些人认为这是作弊行为,并且当它发生时就开始疯狂地投票. (5认同)
  • 我本来希望,因为我专门发布它来纠正另一个不会被视为坏事的问题的完全错误的答案.游民. (3认同)
  • 很高兴看到人们再次回答他们自己的问题. (2认同)