2017-01-16 50 views
0

使用以下代碼將base64字符串轉換爲普通字符串。Base 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

是基地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

確定我將設法.... –

+0

來自服務器的響應已經是一個base64字符串,所以我用作以下'NSData的* nsdataDecoded = [數據initWithBase64EncodedData:數據選擇:0]; 的NSString * STR = [[NSString的頁頭] initWithData:nsdataDecoded編碼:NSUTF8StringEncoding];' –