【问题标题】:Base64 Decoding in iOS 7+iOS 7+ 中的 Base64 解码
【发布时间】:2013-10-05 23:06:26
【问题描述】:

我使用 iOS7 中添加的 NSData 类新 API 对文本(NSString)进行了编码。

使用这个

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding;  

这是我的代码

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

NSLog(@"%@", base64EncodedString);

我正在寻找解码它

【问题讨论】:

标签: ios objective-c swift ios7 ios8


【解决方案1】:

斯威夫特 3+

let plainString = "foo"

编码

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

解码

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

斯威夫特
let plainString = "foo"

编码

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

解码

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

目标-C

NSString *plainString = @"foo";

编码

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

解码

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

【讨论】:

  • 我不认为这段代码是干净的。我收到警告:“使用 NSData 表达式初始化 NNSTring 的指针类型不兼容”
  • @drlobo 你必须输入 base64EncodedDataWithOptions: 而不是 base64EncodedStringWithOptions:
  • 谢谢。我刚刚发现:一个常量kNilOptions 等于 0,这可以说比使用 0 作为选项更具可读性。
  • @AdamWaite kNilOptionsMacTypes.h 中定义,这是一个遗留的 OSX 标头,所以我不喜欢使用它,因为我认为应该从 iOS SDK 中完全删除该标头。无论如何,你说它非常易读是有道理的,所以请随意使用它。
  • 如果有人得到 nil 试试 NSDataBase64DecodingOptions.IgnoreUnknownCharacters 我有这个问题
【解决方案2】:

如果您想编写后备代码,则从一开始就在 iOS 中提供 base64 解码,这是 NSURL 的警告:

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

return [NSData dataWithContentsOfURL:URL];

【讨论】:

  • 我对这个答案印象深刻。多年来,我一直在使用一些荒谬的代码来解码字符串,并且一直有一个 2 行解决方案。
  • 这太棒了!哈克,但很棒:)
  • 我从来没有想过是这么容易!谢谢!!
猜你喜欢
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 2011-03-08
  • 2014-10-07
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多