Base 64 decoding produces empty
我使用以下代码将base64字符串转换为普通字符串。
1 2 3 4 5 6 | 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字符串,但解码的字符串为空。 为什么这样?
解码前避免转换为字符串:
1 2 | NSData *decodedData = [[NSData alloc] initWithBase64EncodedData:data options:NSDataBase64DecodingIgnoreUnknownCharacters]; NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding]; |
Base64的某些实现每64个字符添加一个换行符。 您应该能够使用以下选项解决此问题:
如果要编码和解码数据,则可以使用此代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // 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); |
您可以使用Base64库进行编码或解码,
https://github.com/dasdom/hAppy/tree/master/base64
然后,您可以使用此代码,
NSString * strEncoded = [Base64 encoding:data];