Quiero convertir NSData a NSString ... ¿Cuál es la mejor manera de hacer esto?
Estoy usando este código pero la cadena final devuelve nulo
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
Cuando vea la consola, se imprimirá nulo.
iphone
objective-c
ios
ipad
Mehul Mistri
fuente
fuente
nil
, ¿supongo que sus datos no son una cadena utf8 válida?Respuestas:
Los documentos para
NSString
dicehttps://developer.apple.com/documentation/foundation/nsstring/1416374-initwithdata
Debería probar otra codificación para verificar si resuelve su 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 };
fuente
NSASCIIStringEncoding
Utilice el siguiente código.
NSString* myString; myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
fuente
NSASCIIStringEncoding
. ver la respuesta de felipes para otras codificaciones-[NSString initWithData:encoding]
devolveránil
si la codificación especificada no coincide con la codificación de los datos.Asegúrese de que sus datos estén codificados en UTF-8 (o cambie NSUTF8StringEncoding a cualquier codificación que sea apropiada para los datos).
fuente
NSString *string = [NSString stringWithUTF8String:[Data bytes]];
fuente
-[NSString initWithData:encoding]
es tu amigo, pero solo cuando usas una codificación adecuada.fuente
C objetivo:
[[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
Rápido:
fuente
Rápido:
o
.utf8
cualquier codificación apropiadafuente
¿No estás seguro del tipo de codificación de los datos? ¡No hay problema!
Sin necesidad de conocer los tipos de codificación potenciales, en los que los tipos de codificación incorrectos le darán nulo / nulo, esto debería cubrir todas sus bases:
NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];
¡Hecho!
Nota: En caso de que esto falle de alguna manera, puede desempaquetar su NSData con
NSKeyedUnarchiver
, luego volver a empaquetarlo de(id)unpacked
nuevo a travésNSKeyedArchiver
, y ese formulario NSData debe ser codificable en base64.id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data]; data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];
fuente
NSData *tmpData; NSString *tmpString = [NSString stringWithFormat:@"%@", tmpData]; NSLog(tmpString)
fuente
{length = XX, bytes = 0xYYYYYYYY}
y supongo que la pregunta fue cómo desenvolver una cadena codificada de bytes sin procesar, no su descripciónObjective C incluye una forma incorporada de detectar la codificación de una cadena incrustada en NSData.
NSData* data = // Assign your NSData object... NSString* string; NSStringEncoding encoding = [NSString stringEncodingForData:data encodingOptions:nil convertedString:&string usedLossyConversion:nil];
fuente