Je veux convertir NSData en NSString .. Quelle est la meilleure façon de faire cela?
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, il affichera null.
iphone
objective-c
ios
ipad
Mehul Mistri
la source
la source
nil
je suppose que vos données ne sont pas une chaîne utf8 valide?Réponses:
La documentation pour
NSString
dithttps://developer.apple.com/documentation/foundation/nsstring/1416374-initwithdata
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 };
la source
NSASCIIStringEncoding
Utilisez le code ci-dessous.
NSString* myString; myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
la source
NSASCIIStringEncoding
. voir la réponse de-[NSString initWithData:encoding]
retourneranil
si le codage spécifié ne correspond pas au codage des données.Assurez-vous que vos données sont encodées en UTF-8 (ou remplacez NSUTF8StringEncoding par le codage approprié pour les données).
la source
NSString *string = [NSString stringWithUTF8String:[Data bytes]];
la source
-[NSString initWithData:encoding]
est votre ami mais uniquement lorsque vous utilisez un encodage approprié.la source
Objectif c:
[[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding];
Rapide:
la source
Rapide:
ou
.utf8
tout autre encodage appropriéla source
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 de mauvais types de codage vous donneront nil / null, cela devrait couvrir toutes vos bases:
NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn];
Terminé!
Remarque: en cas d'échec, vous pouvez décompresser votre NSData avec
NSKeyedUnarchiver
, puis reconditionner le(id)unpacked
viaNSKeyedArchiver
, et ce formulaire NSData devrait être encodable en base64.id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data]; data = [NSKeyedArchiver archivedDataWithRootObject:unpacked];
la source
NSData *tmpData; NSString *tmpString = [NSString stringWithFormat:@"%@", tmpData]; NSLog(tmpString)
la source
{length = XX, bytes = 0xYYYYYYYY}
et je suppose que la question était de savoir comment déballer la chaîne codée des octets bruts, pas leur descriptionObjective C inclut un moyen intégré de détecter le codage d'une chaîne incorporée dans NSData.
NSData* data = // Assign your NSData object... NSString* string; NSStringEncoding encoding = [NSString stringEncodingForData:data encodingOptions:nil convertedString:&string usedLossyConversion:nil];
la source