Я хочу преобразовать NSData в NSString .. Как лучше всего это сделать?
Я использую этот код, но последняя строка возвращает null
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
Когда я увижу консоль, она напечатает null.
iphone
objective-c
ios
ipad
Мехул Мистри
источник
источник
nil
то я думаю, ваши данные не являются действительной строкой utf8?Ответы:
Документы для
NSString
говоритhttps://developer.apple.com/documentation/foundation/nsstring/1416374-initwithdata
Вы должны попробовать другую кодировку, чтобы проверить, решает ли она вашу проблему.
// 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 };
источник
NSASCIIStringEncoding
Используйте приведенный ниже код.
NSString* myString; myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
источник
NSASCIIStringEncoding
. другие кодировки см. в ответе felipes-[NSString initWithData:encoding]
вернется,nil
если указанная кодировка не соответствует кодировке данных.Убедитесь, что ваши данные закодированы в UTF-8 (или измените NSUTF8StringEncoding на любую кодировку, подходящую для данных).
источник
NSString *string = [NSString stringWithUTF8String:[Data bytes]];
источник
-[NSString initWithData:encoding]
ваш друг, но только если вы используете правильную кодировку.источник
Цель C:
[[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
Swift:
источник
Swift:
или
.utf8
или любая другая подходящая кодировкаисточник
Не уверены в типе кодировки данных? Нет проблем!
Без необходимости знать потенциальные типы кодирования, в которых неправильные типы кодирования дадут вам nil / null, это должно охватывать все ваши основы:
NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];
Выполнено!
Примечание. Если это каким-то образом не удается, вы можете распаковать свои NSData с помощью , а
NSKeyedUnarchiver
затем(id)unpacked
снова упаковать их черезNSKeyedArchiver
переходное отверстие, и эта форма NSData должна быть кодируемой в формате base64.id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data]; data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];
источник
NSData *tmpData; NSString *tmpString = [NSString stringWithFormat:@"%@", tmpData]; NSLog(tmpString)
источник
{length = XX, bytes = 0xYYYYYYYY}
и я предполагаю, что вопрос заключался в том, как развернуть закодированную строку из необработанных байтов, а не их описанияObjective C включает встроенный способ обнаружения кодировки строки, встроенной в NSData.
NSData* data = // Assign your NSData object... NSString* string; NSStringEncoding encoding = [NSString stringEncodingForData:data encodingOptions:nil convertedString:&string usedLossyConversion:nil];
источник