iphone - Conversión de NSData a NSString en Objective c
objective-c ios (9)
en el objetivo C:
NSData *tmpData;
NSString *tmpString = [NSString stringWithFormat:@"%@", tmpData];
NSLog(tmpString)
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 veo la consola, imprimirá nulo.
¿No está seguro del tipo de codificación de datos? ¡No hay problema!
Sin necesidad de conocer los posibles tipos de codificación, en los que los tipos de codificación incorrectos le darán nulo / nulo, esto debería abarcar todas sus bases:
NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];
¡Hecho!
Nota: En caso de que esto de alguna manera falle, puede descomprimir su NSData con NSKeyedUnarchiver
, luego volver a NSKeyedUnarchiver
el (id)unpacked
nuevamente a través de NSKeyedArchiver
, y ese formulario NSData debe ser codificado en base64.
id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data];
data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];
C objetivo:
[[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
Rápido:
let str = String(data: data, encoding: NSUTF8StringEncoding)
Los documentos para NSString
dicen
https://developer.apple.com/documentation/foundation/nsstring/1416374-initwithdata
Valor de retorno Un objeto NSString inicializado convirtiendo los bytes en datos en caracteres Unicode usando codificación. El objeto devuelto puede ser diferente del receptor original. Devuelve nil si la inicialización falla por algún motivo (por ejemplo, si los datos no representan datos válidos para la codificación).
Deberías probar con otra codificación para ver si resuelve tu 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
};
Rápido:
let jsonString = String(data: jsonData, encoding: .ascii)
o .utf8
o la codificación que corresponda
Use el código a continuación.
NSString* myString;
myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
-[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 la codificación que sea apropiada para los datos).
-[NSString initWithData:encoding]
es tu amigo, pero solo cuando usas una codificación adecuada.
NSString *string = [NSString stringWithUTF8String:[Data bytes]];