Base64 Decoding di iOS 7+

184

Saya memiliki teks yang dikodekan ( NSString) menggunakan NSDataAPI kelas baru yang ditambahkan di iOS7.

menggunakan ini

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

ini kodeku

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

NSLog(@"%@", base64EncodedString);

Saya mencari untuk memecahkan kode itu

Sandeep Khade
sumber
7
m_EncodeText: tolong hentikan
Carl Veazey
1
di mana Anda telah menemukan base64EncodedStringWithOptions:?
user2159978
@ user2159978 ada di sana di apple docs developer.apple.com/library/ios/documentation/cocoa/reference/…
Sandeep Khade
Sepertinya itu terjadi ketika saya menggunakan target aplikasi konsol mac os. Atau versi lama target sdk / mac os
user2159978

Jawaban:

438

Swift 3+

let plainString = "foo"

Pengkodean

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
}

Cepat <3

let plainString = "foo"

Pengkodean

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

Objektif-C

NSString *plainString = @"foo";

Pengkodean

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 

Gabriele Petronella
sumber
1
Saya rasa kode ini tidak bersih. Saya mendapatkan peringatan: "jenis pointer yang tidak kompatibel menginisialisasi NNSTring dengan ekspresi NSData"
drlobo
9
@drlobo, Anda harus mengetik base64EncodedDataWithOptions: alih-alih base64EncodedStringWithOptions:
Bach
4
Terima kasih untuk ini. Sesuatu yang baru saya temukan: konstanta kNilOptionssama dengan 0 yang bisa dibilang lebih mudah dibaca daripada menggunakan 0 untuk opsi.
Adam Waite
2
@AdamWaite kNilOptionsdidefinisikan MacTypes.hsebagai header OSX yang lama, jadi saya tidak suka menggunakannya, karena saya pikir header itu harus dihapus dari iOS SDK sama sekali. Ngomong-ngomong, Anda memiliki poin dalam mengatakan bahwa itu sangat mudah dibaca, jadi silakan menggunakannya.
Gabriele Petronella
2
jika ada yang mendapatkan nol coba NSDataBase64DecodingOptions.IgnoreUnknownCharacterssaya punya masalah ini
spaceMonkey
81

Jika Anda ingin menulis kode fallback, decoding dari base64 telah ada di iOS sejak awal dengan peringatan NSURL:

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

return [NSData dataWithContentsOfURL:URL];
Tommy
sumber
12
Saya sangat terkesan dengan jawaban ini. Selama bertahun-tahun saya telah menggunakan beberapa jumlah kode yang konyol untuk memecahkan kode string, dan selama ini ada solusi 2 baris.
AlBeebe
Ini luar biasa! Meretas, tapi luar biasa :)
Micha Mazaheri
Saya tidak pernah mengira ini begitu mudah! Terima kasih!!
Kumar C