İOS 7 ve sonraki sürümlerinde Base64 Kod Çözme


184

İOS7'de eklenen Sınıf yeni API'yi NSStringkullanarak Kodlanmış metin ( ) var NSData.

bunu kullanarak

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

işte kodum

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

NSLog(@"%@", base64EncodedString);

Kodunu çözmeyi arıyorum


7
m_EncodeText: lütfen durun
Carl Veazey

1
nerede bulduk base64EncodedStringWithOptions:?
user2159978


Görünüşe göre mac os konsol uygulama hedefini kullandığımda oluyor. Veya sdk / mac os
target'ın

Yanıtlar:


438

Hızlı 3+

let plainString = "foo"

Kodlama

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"

Kodlama

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";

Kodlama

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 


1
Bu kodun temiz olduğunu sanmıyorum. Uyarı: "NSData bir ifade ile NNSTring başlatan uyumsuz işaretçi türleri"
drlobo

9
@drlobo, base64EncodedDataWithOptions yazmış olmanız gerekir: base64EncodedStringWithOptions yerine:
Bach

4
Bunun için teşekkürler. Bulduğum bir şey: bir sabit kNilOptions0'a eşittir, bu da seçenekler için 0 kullanmaktan daha kolay okunabilir.
Adam Waite

2
@AdamWaite kNilOptions, MacTypes.heski bir OSX üstbilgisi olarak tanımlanmıştır, bu yüzden kullanmayı sevmiyorum, çünkü başlığın iOS SDK'dan tamamen kaldırılması gerektiğini düşünüyorum. Her neyse, bunun çok okunabilir olduğunu söylemenin bir anlamı var, bu yüzden kullanmaktan çekinmeyin.
Gabriele Petronella

2
kimse alma bir nil denemek NSDataBase64DecodingOptions.IgnoreUnknownCharactersben bu sorunu vardı
spaceMonkey

81

Yedek kod yazmak istiyorsanız, şu andan itibaren uyarı ile base64'ten kod çözme iOS'ta mevcuttu NSURL:

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

return [NSData dataWithContentsOfURL:URL];

12
Bu cevaptan çok etkilendim. Yıllardır ben bir dize kodunu çözmek için bazı saçma miktarda kod kullanıyorum, ve tüm boyunca 2 satır bir çözüm vardı.
AlBeebe

Bu harika! Hacky, but awesome :)
Micha Mazaheri

Hiç bu kadar kolay olduğunu düşünmemiştim! Teşekkürler!!
Kumar C
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.