2016-05-11 2 views
0

Я пытаюсь декодировать закодированную строку Base64, и он всегда возвращает nil при использовании кодировки UTF8. Я попытался изменить кодировку символов на несколько разных опций и не могу заставить ее возвращать то же значение, что и когда я помещаю ее в такой веб-сайт, как: https://www.base64decode.org/ObjC Base64 Decode возвращает nil

Строка, которую я пытаюсь декодировать, это «qc6mSDfm1pizbp0szoQmoQ = =»

Вот код, я использую, чтобы проверить эту

// DataHelper.m 

+(NSString*) base64Encode:(NSString*) string andEncoding:(NSStringEncoding) encoding { 
    NSData *plainData = [string dataUsingEncoding:encoding]; 
    return [plainData base64EncodedStringWithOptions:kNilOptions]; 
} 

+(NSString*) base64Decode:(NSString*) string andEncoding:(NSStringEncoding) encoding { 
    NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:string options:kNilOptions]; 
    NSString *str = [[NSString alloc] initWithData:decodedData encoding:encoding]; 
    return str; 
} 


// TestCases.m 
-(void) testDecodeEncodeNonce { 
    NSString *nonce = @"qc6mSDfm1pizbp0szoQmoQ=="; 
    NSString *decoded = [DataHelper base64Decode:nonce andEncoding:NSUTF8StringEncoding]; 
    NSString *encoded = [DataHelper base64Encode:decoded andEncoding:NSUTF8StringEncoding]; 
    XCTAssertEqualObjects(nonce, encoded); 
} 
+0

1. Вы пробовали NSASCIIStringEncoding? 2. Является ли '-base64Encode: andEncoding:' работает правильно? – fullofsquirrels

+0

Да, я получаю ту же ошибку. «закодированный» возвращается как null. – Geoff

ответ

1

Ваш код работает отлично (попробуйте это: Y2hlY2sgaXQgb3V0IG15IGVuY29kZWQgc3RyaW5nLg==). Ваша проблема не в коде, а в символах, которые вы закодировали. Как-то вы закодировали специальные символы, которые initWithBase64EncodedString не может декодировать в NSUTF8StringEncoding вместо NSASCIIStringEncoding.

Надеюсь, это может вам помочь.

+0

Я получаю ту же ошибку. «закодированный» возвращается как null. – Geoff

+0

Я изменил его на NSISOLatin1StringEncoding, и мой тестовый пример теперь работает. Спасибо за вашу помощь! – Geoff

+0

Отлично работает NSISOLatin1StringEncoding! –

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