Декодирование Base64 в iOS 7+

184

Я закодировал текст ( NSString) используя NSDataClass новый API, который добавлен в iOS7.

используя это

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

вот мой код

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

NSLog(@"%@", base64EncodedString);

Я хочу расшифровать

Сандип Хаде
источник
7
m_EncodeText: пожалуйста, прекратите
Карл Визи
1
где вы нашли base64EncodedStringWithOptions:?
user2159978
@ user2159978 это там, в Apple
Docs
Похоже, это происходит, когда я использую целевой консоль Mac OS. Или старая версия цели sdk / mac os
user2159978

Ответы:

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

Objective-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 

Габриэле Петронелла
источник
1
Я не думаю, что этот код чистый. Я получаю предупреждение: «несовместимые типы указателей, инициализирующие NNSTring выражением NSData»
drlobo
9
@drlobo вы должны были ввести base64EncodedDataWithOptions: вместо base64EncodedStringWithOptions:
Бах
4
Спасибо за это. Что-то, что я только что нашел: константа kNilOptionsравна 0, что, вероятно, более читабельно, чем использование 0 для опций.
Адам Уэйт
2
@AdamWaite kNilOptions- MacTypes.hэто устаревший заголовок OSX, поэтому я не люблю его использовать, так как считаю, что этот заголовок должен быть полностью удален из iOS SDK. В любом случае, у вас есть смысл сказать, что он очень удобочитаемый, поэтому не стесняйтесь его использовать.
Габриэле Петронелла,
2
если кто-то попробовал ноль, у NSDataBase64DecodingOptions.IgnoreUnknownCharactersменя была эта проблема
spaceMonkey