将NSString转换为NSData是否会强制添加一个尾随字节?

17

这是对这个错误答案的回应:https://dev59.com/fXNA5IYBdhLWcg3wmfAa#7894952

是否可以将NSString转换为以下形式:

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

强制添加一个尾部的 \0 字节,这意味着

-[NSJSONSerialization:JSONObjectWithData:] 

如果不移除它,其他人将会失败。


1
哈!你确实从一个扩展评论(碰巧适合问答格式)中获得了很多声望,这是对错误答案的回应。好吧,我不会嫉妒你的。 :) - Mark Amery
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);

试一试,然后取消“DO NOT DO THIS”这一行的注释再试一次。你会发现没有问题。


2
很高兴再次看到有人回答自己的问题。 - CodaFi
1
@CodaFi 这是一件坏事吗? - jpswain
5
不,事实上,在常见问题解答中还鼓励这样做。只是有些人认为这是作弊,当它发生时就开始疯狂地投反对票。 - CodaFi
3
我本希望由于我特意在另一个问题中发布了此回答以纠正一个完全错误的答案,这不会被视为不好的事情。遗憾。 - jpswain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接