web-dev-qa-db-fra.com

Conversion de NSData en NSString dans Objective c

Je veux convertir NSData en NSString..Quel est le meilleur moyen de le faire?

J'utilise ce code mais la chaîne finale renvoie null

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

Quand je vois la console, elle imprimera null.

83
Mehul Mistri

La documentation pour NSString dit

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

Valeur de retour Un objet NSString initialisé en convertissant les octets des données en caractères Unicode à l'aide de l'encodage. L'objet retourné peut être différent du destinataire d'origine. Renvoie la valeur nil si l'initialisation échoue pour une raison quelconque (par exemple, si les données ne représentent pas des données valides pour le codage).

Vous devriez essayer un autre encodage pour vérifier s'il résout votre problème.

 // 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
};
46
Felipe Sabino

Utilisez le code ci-dessous.

NSString* myString;
myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
86
Jhaliya

-[NSString initWithData:encoding] retournera nil si le codage spécifié ne correspond pas au codage des données.

Assurez-vous que vos données sont codées en UTF-8 (ou remplacez NSUTF8StringEncoding par un codage approprié pour les données).

15
Morten Fast
NSString *string = [NSString stringWithUTF8String:[Data bytes]];
6
Nag Raj

-[NSString initWithData:encoding] est votre ami, mais uniquement lorsque vous utilisez un codage approprié.

2
Bilal Khan

en objectif C:

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

Vous n'êtes pas sûr du type de codage des données? Aucun problème!

Sans avoir besoin de connaître les types de codage potentiels, dans lesquels des types de codage incorrects vous donneront la valeur nil/null, cela devrait couvrir toutes vos bases:

NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];

Fait!




Remarque: Si cela échouait, vous pouvez décompresser votre NSData avec NSKeyedUnarchiver, puis remballer le (id)unpacked à nouveau via NSKeyedArchiver, et ce formulaire NSData devrait être codable en base 64.

id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data];
data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];
1
Albert Renshaw

Objectif c:

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

Rapide:

let str = String(data: data, encoding: .ascii)
1
Alexander Volkov

Rapide:

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

ou .utf8 ou tout codage approprié

0
Jess