关于ios:Base 64解码产生空

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个字符添加一个换行符。 您应该能够使用以下选项解决此问题:NSDataBase64DecodingIgnoreUnknownCharacters


如果要编码和解码数据,则可以使用此代码。

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];