Convert NSData to NSString to Object c

I want to convert NSData to NSString. What is the best way to do this?

I use this code, but the final string returns null

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

When I see the console, it will print zero.

+83
ios objective-c iphone ipad
Jun 20 '11 at 13:33
source share
9 answers

Docs for NSString Say

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

Return Value The NSString object is initialized by converting the bytes in the data to Unicode characters using encoding. The returned object may be different from the original receiver. Returns zero if initialization for any reason (for example, if the data does not represent valid data for encoding).

You should try a different encoding to see if it solves your problem.

  // 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
Jun 20 2018-11-11T00:
source share

Use the code below.

 NSString* myString; myString = [[NSString alloc] initWithData:nsdata encoding:NSASCIIStringEncoding]; 
+86
Jun 20 '11 at 13:35
source share

-[NSString initWithData:encoding] will return nil if the specified encoding does not match the encoding of the data.

Make sure your data is encoded in UTF-8 (or change NSUTF8StringEncoding to any encoding that matches the data).

+15
Jun 20 '11 at 13:40
source share
 NSString *string = [NSString stringWithUTF8String:[Data bytes]]; 
+6
May 26 '14 at 5:44
source share

-[NSString initWithData:encoding] is your friend, but only with the correct encoding.

+2
Jan 17 '13 at 7:01
source share

Goal C:

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

Swift:

 let str = String(data: data, encoding: .ascii) 
+1
Mar 27 '16 at 13:41
source share

in object C:

 NSData *tmpData; NSString *tmpString = [NSString stringWithFormat:@"%@", tmpData]; NSLog(tmpString) 
+1
Apr 19 '17 at 17:03 on
source share

Not sure about the type of data encoding? No problems!

Without the need to know potential encoding types in which the wrong encoding types will give you zero / zero, this should cover all of your bases:

 NSString *dataString = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn]; 

Done!










Note. If NSKeyedUnarchiver , you can unpack NSData using NSKeyedUnarchiver and then re-pack (id)unpacked NSKeyedArchiver through NSKeyedArchiver , and this NSData form must be encoded in base64.

 id unpacked = [NSKeyedUnarchiver unarchiveObjectWithData:data]; data = [NSKeyedArchiver archivedDataWithRootObject:unpacked]; 
+1
Jun 05 '18 at 3:08
source share

Swift:

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

or .utf8 or any suitable encoding

0
Aug 01 '17 at 11:50 on
source share



All Articles