ObjC Base64 Decode返回nil

时间:2016-05-11 15:45:38

标签: objective-c string base64

我试图解码Base64编码的字符串,并且在使用UTF8编码时它总是返回nil。我尝试将字符编码更改为多个不同的选项,并且无法将其返回与将其放入以下网站时相同的值:https://www.base64decode.org/

我试图解码的字符串是" 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);
}

1 个答案:

答案 0 :(得分:1)

您的代码运行正常(试试这个:Y2hlY2sgaXQgb3V0IG15IGVuY29kZWQgc3RyaW5nLg==)。您的问题不是代码,而是您编码的字符。不知何故,您编辑了initWithBase64EncodedString无法在NSUTF8StringEncoding使用NSASCIIStringEncoding而不是[ContentOutputCache]进行解码的特殊字符。

我希望这可以帮到你。