2017-06-16 8 views
0

私のresultStringは 'PHNhbWxwOlJlc3BvbnNlIH ... c3BvbnNlPgoK'で、私がデコードしているときには、デコードされたデータをnilとして表示します。initWithBase64EncodedString return nil

NSData * decodedData = [[NSData alloc] initWithBase64EncodedString:resultString options:0];

私はhttps://www.base64decode.org/でこの文字列を試しましたが、 という結果が表示されました。

ここでデコードで何が間違っていますか?

+1

あなたはそれをSOで検索しようとしましたか? :|このリンクがあなたを助けてくれることを願っています https://stackoverflow.com/questions/19088231/base64-decoding-in-ios-7 –

+0

はい私は最初に検索してから投稿しました。 –

答えて

0

試してみてください!簡単な解決策:Foundation.frameworkが必要です。デフォルトでは、入力が有効なBase-64として認識されない場合、initWithBase64EncodedStringメソッドはnilを返します。文字列が有効なBase-64タイプかどうかを確認してください!

NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:@"eyJuYW1lIjoidmlnbmVzaCJ9" options:0]; 
    NSError *dataError; 
    NSDictionary* responseObject = [NSJSONSerialization JSONObjectWithData:decodedData 
               options:kNilOptions 
                error:&dataError]; 
    if(dataError == nil) { 
     NSLog(@"Result %@",responseObject); 
    } 
+0

ここで、decodedDataはnilなので、クラッシュしています。 –

+0

あなたは、プロジェクトの基礎フレームワークを追加しましたか?結果{ 名前= vignesh; } –

+0

@KrishSolanki、サンプルコード文字列を入力してください。 –

0

ほぼ確実にあなたの文字列が有効なBase64ではありませんが、base64decode.orgがそれを受け入れることを「十分に閉鎖」されています。最も可能性の高い原因は、あなたが末尾の=を削除したことです。 base64decode.orgはそれに寛容で、デコードできないもの(その場合は最後のバイト)を静かに破棄します。 NSDataは、それが有効なBase64ではないため、これを許容しません。

base64decode.orgでも、文字列内のランダムな非ベース64文字を許容し、それらを放棄します。 NSDataではありません(再び正弦は無効です)。

1

おそらく、あなたの文字列に新しい行を埋め込むようないくつかの無効な文字があります。 0の代わりにNSDataBase64DecodingIgnoreUnknownCharactersオプションを渡すようにしてください。

NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:resultString options:NSDataBase64DecodingIgnoreUnknownCharacters]; 
関連する問題