2017-01-16 51 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];' –