Quiero convertir NSData a NSString..¿Cuál es la mejor manera de hacer esto?

Estoy usando este código, pero el final de la cadena devuelve null

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

Cuando veo que la consola se va a imprimir null.

  • NSLog los datos.
  • Quiere mostrar datos
  • Son la misma persona o desde dentro de la misma lan? Me pregunto, ¿por qué tu identicons es exactamente el mismo.
  • ¿Cuál es la cadena de caracteres? Si usted está recibiendo nil entonces supongo que sus datos no es válido utf8 string?
  • Para tu tipo de información no sé nik…
  • que es muy divertido, ya que es extremadamente raro. pero todavía es posible.

InformationsquelleAutor Mehul Mistri | 2011-06-20

9 Comentarios

  1. 46

    La documentación para el NSString dice

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

    Valor devuelto Un objeto NSString
    inicializa mediante la conversión de los bytes en
    de datos en el uso de caracteres Unicode
    de la codificación. El objeto devuelto puede ser
    diferente de la original del receptor.
    Devuelve nil si la inicialización
    falla por alguna razón (por ejemplo si
    los datos no representan datos válidos para
    codificación).

    Usted debe tratar de otra codificación para comprobar si se resuelve el 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
    };
    • NSASCIIStringEncoding
    • Que utiliza los números en lldb. De lo contrario no funciona. Gracias.
    • Nota: Si no está seguro del tipo de codificación o si no es siempre el mismo, este enfoque va a ser bueno para usted: stackoverflow.com/a/50691430/2057171
  2. 86

    Utilizar a continuación el código.

    NSString* myString;
    myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
    • esto no me dará la debida cadena de
    • Hizo usted ?
    • si no, no es NSASCIIStringEncoding. consulte felipe respuesta para otras codificaciones
  3. 15

    -[NSString initWithData:encoding] volverá nil si la codificación especificada no coincide con los datos de la codificación.

    Asegúrese de que sus datos están codificados en UTF-8 (o cambio NSUTF8StringEncoding a cualquier codificación que es apropiado para los datos).

    • Me convertí en una imagen en la NSdata y de nuevo la conversión de la NSdata en la Cadena mediante la NSUTF8StringEncoding. Pero es muestra de nada.
  4. 6
    NSString *string = [NSString stringWithUTF8String:[Data bytes]];
    • Esto no funciona como se describe [[NSString alloc] initWithData:cabeza de codificación:NSUTF8StringEncoding] funciona
  5. 2

    -[NSString initWithData:encoding] es su amigo, pero sólo cuando se utiliza una codificación adecuada.

  6. 1

    en objective C:

    NSData *tmpData;
    NSString *tmpString = [NSString stringWithFormat:@"%@", tmpData];
    NSLog(tmpString)
  7. 1

    Seguro de los datos del tipo de codificación? No hay problema!

    Sin necesidad de conocer el potencial de los tipos de codificación, en la que mal tipos de codificación le dará nil/null, este debe cubrir todas sus bases:

    NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];

    Hecho!




    Nota: En el caso de que esto de alguna manera se produce un error, puede desempaquetar su NSData con NSKeyedUnarchiver, a continuación, vuelva a embalar el (id)unpacked de nuevo a través de NSKeyedArchiver, y que NSData formulario debe ser base64 codicable.

    id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];
  8. 0

    Objetivo C:

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

    Swift:

    let str = String(data: data, encoding: NSUTF8StringEncoding)
  9. 0

    Swift:

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

    o .utf8 o cualquier codificación que corresponda

Dejar respuesta

Please enter your comment!
Please enter your name here