关于objective c:将NSString转换为NSData会强制使用尾随字节吗?

Does converting NSString to NSData force a trailing byte?

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

转换nsstring是否如下所示:

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

强制尾随字节,这意味着

1
-[NSJSONSerialization:JSONObjectWithData:]

其他人会失败,除非你移除它。


不,不是。请参见此示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);

尝试一下,然后用未注释的"请勿执行此操作"行尝试一下。你会发现没问题的。