Quero converter NSData em NSString ... Qual é a melhor maneira de fazer isso?
Estou usando este código, mas a string final retorna nulo
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
Quando vejo o console, ele imprime nulo.
iphone
objective-c
ios
ipad
Mehul Mistri
fonte
fonte
nil
então eu acho que seus dados não são uma string utf8 válida?Respostas:
A documentação para
NSString
dizhttps://developer.apple.com/documentation/foundation/nsstring/1416374-initwithdata
Você deve tentar outra codificação para verificar se ela resolve o seu problema
// 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 };
fonte
NSASCIIStringEncoding
Use o código abaixo.
NSString* myString; myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
fonte
NSASCIIStringEncoding
. veja a resposta de felipes para outras codificações-[NSString initWithData:encoding]
retornaránil
se a codificação especificada não corresponder à codificação dos dados.Certifique-se de que seus dados estejam codificados em UTF-8 (ou altere NSUTF8StringEncoding para qualquer codificação apropriada para os dados).
fonte
NSString *string = [NSString stringWithUTF8String:[Data bytes]];
fonte
-[NSString initWithData:encoding]
é seu amigo, mas apenas quando você usa uma codificação adequada.fonte
Objetivo C:
[[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
Rápido:
fonte
Rápido:
ou
.utf8
ou qualquer codificação apropriadafonte
Não tem certeza do tipo de codificação dos dados? Sem problemas!
Sem a necessidade de conhecer os tipos de codificação potenciais, nos quais os tipos de codificação incorretos resultarão em nil / null, isso deve abranger todas as suas bases:
NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];
Feito!
Observação: no caso de falha de alguma forma, você pode descompactar seu NSData com e
NSKeyedUnarchiver
, em seguida, empacotar(id)unpacked
novamente viaNSKeyedArchiver
, e esse formulário NSData deve ser codificado em base64.id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data]; data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];
fonte
NSData *tmpData; NSString *tmpString = [NSString stringWithFormat:@"%@", tmpData]; NSLog(tmpString)
fonte
{length = XX, bytes = 0xYYYYYYYY}
e suponho que a pergunta era como desembrulhar string codificada de bytes brutos, não sua descriçãoObjective C inclui uma maneira embutida de detectar a codificação de uma string embutida em NSData.
NSData* data = // Assign your NSData object... NSString* string; NSStringEncoding encoding = [NSString stringEncodingForData:data encodingOptions:nil convertedString:&string usedLossyConversion:nil];
fonte