iOS 7+中的Base64解码


184

我已经NSString使用NSDataiOS7中添加的Class new API 编码了text()。

使用这个

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

这是我的代码

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

NSLog(@"%@", base64EncodedString);

我正在寻找解码


7
m_EncodeText:请停下来
卡尔·韦阿齐

1
你在哪里找到的base64EncodedStringWithOptions:
user2159978 2014年


当我使用mac os控制台应用程序目标时,似乎会发生这种情况。还是sdk / mac os目标的旧版本
2014年

Answers:


438

迅捷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
}

迅捷<3

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

物镜

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 


1
我认为这段代码并不干净。我收到警告:“使用NSData表达式初始化NNSTring的指针类型不兼容”
drlobo

9
@drlobo,您必须输入base64EncodedDataWithOptions:而不是base64EncodedStringWithOptions:
巴赫

4
谢谢你 我刚发现的东西:一个常数kNilOptions等于0,可以说比使用0表示选项更具可读性。
亚当·怀特

2
@AdamWaite kNilOptions定义在MacTypes.h其中,是旧版OSX标头,因此我不喜欢使用它,因为我认为应将标头从iOS SDK中完全删除。无论如何,您有一点要说,那就是可读性强,因此请随时使用它。
加布里埃尔·彼得罗内拉2014年

2
如果有人得到零尝试NSDataBase64DecodingOptions.IgnoreUnknownCharacters我有这个问题
spaceMonkey '16

81

如果您想编写后备代码,则从一开始就在iOS中存在从base64进行解码的警告NSURL

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

return [NSData dataWithContentsOfURL:URL];

12
这个答案让我印象深刻。多年来,我一直在使用一些荒谬的代码来解码字符串,并且一直以来都有2行解决方案。
AlBeebe 2014年

这太棒了!暴躁,但真棒:)
Micha Mazaheri 2014年

我从来没有想过是那么容易!谢谢!!
Kumar C
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.