iOS 7中的Base64解码

San*_*ade 182 objective-c ios ios7 swift ios8

NSString使用NSData在iOS7中添加的Class new API 编码了text().

用这个

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding;  
Run Code Online (Sandbox Code Playgroud)

这是我的代码

NSString *base64EncodedString = [[myText dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0];

NSLog(@"%@", base64EncodedString);
Run Code Online (Sandbox Code Playgroud)

我想解码它

Gab*_*lla 435

Swift 3+

let plainString = "foo"
Run Code Online (Sandbox Code Playgroud)

编码

let plainData = plainString.data(using: .utf8)
let base64String = plainData?.base64EncodedString()
print(base64String!) // Zm9v
Run Code Online (Sandbox Code Playgroud)

解码

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

斯威夫特<3

let plainString = "foo"
Run Code Online (Sandbox Code Playgroud)

编码

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

解码

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

Objective-C的

NSString *plainString = @"foo";
Run Code Online (Sandbox Code Playgroud)

编码

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

解码

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

  • @drlobo你必须输入base64EncodedDataWithOptions:而不是base64EncodedStringWithOptions: (9认同)
  • 谢谢你.我刚发现的东西:常量`kNilOptions`等于0,可以说比使用0选项更具可读性. (4认同)
  • @AdamWaite`kNilOptions`在`MacTypes.h`中定义,这是一个传统的OSX标题,所以我不喜欢使用它,因为我认为应该从iOS SDK中删除标题.无论如何,你有一点说可读性很高,所以随意使用它. (2认同)
  • 仅当字符串长度是 4 的倍数时,base64 解码才有效。否则 NSData 返回 nil。 (2认同)
  • 如果有人得到一个零尝试`NSDataBase64DecodingOptions.IgnoreUnknownCharacters`我有这个问题 (2认同)

Tom*_*mmy 81

如果你想编写回退代码,那么iOS中的解码一直存在于iOS中NSURL:

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

return [NSData dataWithContentsOfURL:URL];
Run Code Online (Sandbox Code Playgroud)

  • 我对这个答案印象深刻.多年来,我一直在使用一些荒谬的代码来解码字符串,并且一直有一个2行解决方案. (12认同)
  • 我只是流下了眼泪 (2认同)