2017-01-16 2 views
0

Im используя следующий код для преобразования строки base64 в обычную строку.Базовое 64 декодирование создает пустое

NSError *localError = nil; 
    NSString *myString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:myString options:0]; 
    NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding]; 
    NSLog(@"encoded string , %@",myString); 
    NSLog(@"Decode String Value: %@", decodedString); 

Закодированная строка печатает строку base64, но декодированная строка пуста. Почему так?

ответ

3

Избегайте преобразования в строку перед декодированием:

NSData *decodedData = [[NSData alloc] initWithBase64EncodedData:data options:NSDataBase64DecodingIgnoreUnknownCharacters]; 
NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding]; 

Некоторые реализации Base64 добавить разрывы строк каждые 64 символов. Вы должны решить эту проблему, используя эту опцию: NSDataBase64DecodingIgnoreUnknownCharacters.

+0

все еще выход пуст –

+0

Где находится кодированный base64 контент? Вы уверены, что это действительно так? – JoGoFo

+0

да base 64 строка, полученная с сервера, имеет допустимую форму. –

1

Если вы хотите кодировать и декодировать данные, вы можете использовать этот код.

// Create NSData object 
    NSData *data1 =[@"My String" dataUsingEncoding:NSUTF8StringEncoding]; 

    // Encoded NSString from NSData 
    NSString *base64Encoded = [data1 base64EncodedStringWithOptions:0]; 
    NSLog(@"%@",base64Encoded); 

    // Encoding data 
    NSData *base64Data = [data1 base64EncodedDataWithOptions:0]; 
    NSLog(@"%@",base64Data); 

    // Decoding data 
    NSData *nsdataDecoded = [base64Data initWithBase64EncodedData:base64Data options:0]; 
    NSString *str = [[NSString alloc] initWithData:nsdataDecoded encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@", str); 
+0

он печатает ту же строку base64 –

+0

ok я попробую .... –

+0

Ответ с сервера уже является базой 64, поэтому я использовал следующую строку: NSData * nsdataDecoded = [data initWithBase64EncodedData: data options: 0]; NSString * str = [[NSString alloc] initWithData: nsdataDecoded encoding: NSUTF8StringEncoding]; ' –

0

Вы можете использовать библиотеку Base64 для кодирования или декодирования,

https://github.com/dasdom/hAppy/tree/master/base64

Затем вы можете использовать этот код,

NSString * strEncoded = [Base64 кодирование: данные];

Смежные вопросы