Преобразование NSData в NSString в Задаче c - PullRequest
83 голосов
/ 20 июня 2011

Я хочу конвертировать NSData в NSString .. Какой лучший способ сделать это?

Я использую этот код, но последняя строка возвращает ноль

NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);

Когда я вижу консоль, она выводит ноль.

Ответы [ 9 ]

86 голосов
/ 20 июня 2011

Используйте код ниже.

NSString* myString;
myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
46 голосов
/ 20 июня 2011

В документах для NSString указано

https://developer.apple.com/documentation/foundation/nsstring/1416374-initwithdata

Возвращаемое значение Объект NSString, инициализированный преобразованием байтов данных в символы Юникода с использованием кодировки.Возвращаемый объект может отличаться от исходного получателя.Возвращает nil, если инициализация не удалась по какой-либо причине (например, если данные не представляют действительные данные для кодирования).

Вы должны попробовать другое кодирование, чтобы проверить, решает ли это вашу проблему

 // The following constants are provided by NSString as possible string encodings.
enum {
   NSASCIIStringEncoding = 1,
   NSNEXTSTEPStringEncoding = 2,
   NSJapaneseEUCStringEncoding = 3,
   NSUTF8StringEncoding = 4,
   NSISOLatin1StringEncoding = 5,
   NSSymbolStringEncoding = 6,
   NSNonLossyASCIIStringEncoding = 7,
   NSShiftJISStringEncoding = 8,
   NSISOLatin2StringEncoding = 9,
   NSUnicodeStringEncoding = 10,
   NSWindowsCP1251StringEncoding = 11,
   NSWindowsCP1252StringEncoding = 12,
   NSWindowsCP1253StringEncoding = 13,
   NSWindowsCP1254StringEncoding = 14,
   NSWindowsCP1250StringEncoding = 15,
   NSISO2022JPStringEncoding = 21,
   NSMacOSRomanStringEncoding = 30,
   NSUTF16StringEncoding = NSUnicodeStringEncoding,
   NSUTF16BigEndianStringEncoding = 0x90000100,
   NSUTF16LittleEndianStringEncoding = 0x94000100,
   NSUTF32StringEncoding = 0x8c000100,
   NSUTF32BigEndianStringEncoding = 0x98000100,
   NSUTF32LittleEndianStringEncoding = 0x9c000100,
   NSProprietaryStringEncoding = 65536
};
15 голосов
/ 20 июня 2011

-[NSString initWithData:encoding] вернет nil, если указанная кодировка не соответствует кодировке данных.

Убедитесь, что ваши данные закодированы в UTF-8 (или измените NSUTF8StringEncoding на любую кодировку, которая подходит для данных).

6 голосов
/ 26 мая 2014
NSString *string = [NSString stringWithUTF8String:[Data bytes]];
2 голосов
/ 17 января 2013

-[NSString initWithData:encoding] ваш друг, но только если вы используете правильную кодировку.

1 голос
/ 05 июня 2018

Вы не уверены в типе кодировки данных? Нет проблем!

Без необходимости знать потенциальные типы кодирования, в которых неправильные типы кодирования будут давать вам ноль / ноль, это должно охватывать все ваши базы:

NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];

Готово!




Примечание. В случае неудачи вы можете распаковать NSData с помощью NSKeyedUnarchiver, а затем повторно упаковать (id)unpacked с помощью NSKeyedArchiver, и эта форма NSData должна быть закодирована в base64.

id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data];
data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];
1 голос
/ 19 апреля 2017

в объективе C:

NSData *tmpData;
NSString *tmpString = [NSString stringWithFormat:@"%@", tmpData];
NSLog(tmpString)
1 голос
/ 27 марта 2016

Объектив C:

[[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];

Swift:

let str = String(data: data, encoding: NSUTF8StringEncoding)
0 голосов
/ 01 августа 2017

Swift:

let jsonString = String(data: jsonData, encoding: .ascii)

или .utf8 или любая другая кодировка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...