convert base64 decoded NSData to NSString

2019-05-07 18:52发布

问题:

I'm trying to encode and decode base64 data. but while decoding the base64 data, it returns bunch of hex values, but i couldn't display or printout using NSlog to the original readable strings. The below code couldn't print anything, just empty.

Can anyone help ? thanks > >

NSString* msgEncoded = [[NSString alloc] initWithFormat:@"Q1NNKE1DTC9TTUEgUkNWL2FkbWluQHNldGVjcy5jb20gT1JHLyBUVkIvNDNkYzNlMzQwYWQ3Yzkp:"];  
NSData* decoded = [[NSData alloc] initWithData:[self decodeBase64WithString:msgEncoded]];
NSString* plainString = [[NSString alloc]initWithData:decoded encoding:NSUTF8StringEncoding];
NSLog(@"\n Decoded string:  %@ \n", plainString );

回答1:

There is a built in function in NSData

[data base64Encoding];
[data base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];


回答2:

If you are still having issues, try out this library: https://github.com/l4u/NSData-Base64

use it like so:

#import "NSData+Base64.h"

NSData *someData  //load your data from a file, url or photo as needed
NSData *file = [NSData dataWithContentsOfFile:@"mytextfile.txt"];
NSData *photo = UIImageJPEGRepresentation(self.photo.image,1);

//encode it
NSString *base64string = [photo base64EncodedString];
NSString *base64file = [file base64EncodedString];

//decode it
NSData *back = [NSData dataFromBase64String:base64string];


回答3:

Try Google's GTMStringEncoding class. You'll need GTMDefines.h too.

GTMStringEncoding *coder = [GTMStringEncoding rfc4648Base64StringEncoding];
NSString *encodedBase64 = [coder encodeString:@"Mary had a little lamb"];

// will contain the original text
NSString *decodedText = [coder decodeString:encodedBase64];

To encode NSData* to NSString* and back to NSData*, use the encode: + decode: methods instead of encodeString: + decodeString:.

As a bonus you get a lot of additional useful encodings, such as the url-safe variant of Base64.