Base64 Decoding in iOS 7+ Base64 Decoding in iOS 7+ ios ios

Base64 Decoding in iOS 7+


Swift 3+

let plainString = "foo"

Encoding

let plainData = plainString.data(using: .utf8)let base64String = plainData?.base64EncodedString()print(base64String!) // Zm9v

Decoding

if let decodedData = Data(base64Encoded: base64String!),   let decodedString = String(data: decodedData, encoding: .utf8) {  print(decodedString) // foo}

Swift < 3

let plainString = "foo"

Encoding

let plainData = plainString.dataUsingEncoding(NSUTF8StringEncoding)let base64String = plainData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))print(base64String!) // Zm9v

Decoding

let decodedData = NSData(base64EncodedString: base64String!, options: NSDataBase64DecodingOptions(rawValue: 0))let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding)print(decodedString) // foo

Objective-C

NSString *plainString = @"foo";

Encoding

NSData *plainData = [plainString dataUsingEncoding:NSUTF8StringEncoding];NSString *base64String = [plainData base64EncodedStringWithOptions:0];NSLog(@"%@", base64String); // Zm9v

Decoding

NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];NSLog(@"%@", decodedString); // foo 


In case you want to write fallback code, decoding from base64 has been present in iOS since the very beginning by caveat of NSURL:

NSURL *URL = [NSURL URLWithString:      [NSString stringWithFormat:@"data:application/octet-stream;base64,%@",           base64String]];return [NSData dataWithContentsOfURL:URL];