Преобразует ли NSString в NSData завершающий байт?

Это ответ на неправильный ответ: /questions/5035260/kak-mne-preobrazovat-znachenie-nsstring-v-nsdata/5035270#5035270

Преобразует ли 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);

Попробуйте, а затем попробуйте с некомментированной строкой "НЕ ДЕЛАЙТЕ ЭТОГО". Вы увидите, что нет проблем.

Другие вопросы по тегам