iOS 7以降のBase64デコード


184

iOS7で追加されたクラスの新しいAPIをNSString使用してエンコードされたテキスト()NSDataがあります。

これを使って

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

これが私のコードです

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

NSLog(@"%@", base64EncodedString);

解読したい


7
m_EncodeText:停止してください
Carl Veazey 2013

1
どこで見つけましたbase64EncodedStringWithOptions:か?
user2159978 2014年

@ user2159978それはリンゴのドキュメントにあります developer.apple.com/library/ios/documentation/cocoa/reference/...
サンディープKhade

Mac OSコンソールアプリケーションターゲットを使用すると発生するようです。または、古いバージョンのsdk / mac osターゲット
user2159978

回答:


438

Swift 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
このコードはクリーンだとは思いません。「NSDataの式を使用してNNSTringを初期化する互換性のないポインター型」という警告が表示されます
drlobo '26

9
:代わりにbase64EncodedStringWithOptionsの:@drloboあなたは型付きbase64EncodedDataWithOptions持っている必要があります
バッハ

4
これをありがとう。私が見つけたもの:定数kNilOptionsは0に等しく、オプションに0を使用するよりも間違いなく読みやすいです。
アダムウェイト

2
@AdamWaite kNilOptionsMacTypes.h、レガシーOSXヘッダーで定義されているため、ヘッダーはiOS SDKから完全に削除する必要があると思うので、使用したくない。とにかく、とても読みやすいと言ってもいいので、お気軽にご利用ください。
ガブリエレペトロネラ2014年

2
nilを取得している人がいる場合、NSDataBase64DecodingOptions.IgnoreUnknownCharactersこの問題が発生しました
spaceMonkey

81

フォールバックコードを記述したい場合のために、base64からのデコードは、最初の警告からiOSに存在していましたNSURL

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

return [NSData dataWithContentsOfURL:URL];

12
私はこの答えに完全に感銘を受けました。何年もの間、とんでもない量のコードを使用して文字列をデコードしてきましたが、ずっと2行のソリューションがありました。
AlBeebe 2014

これはすごい!Hacky、but awesome :)
Micha Mazaheri

こんなに簡単だとは思ってもみませんでした。ありがとう!!
Kumar C
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.