【问题标题】:ObjC Base64 Decode returns nilObjC Base64 解码返回 nil
【发布时间】:2016-05-11 15:45:37
【问题描述】:

我正在尝试解码 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.你试过 NSASCIIStringEncoding 吗? 2.-base64Encode:andEncoding:工作正常吗?
  • 是的,我遇到了同样的错误。 “编码”返回为 null。

标签: objective-c string base64


【解决方案1】:

您的代码运行良好(试试这个:Y2hlY2sgaXQgb3V0IG15IGVuY29kZWQgc3RyaW5nLg==)。您的问题不是代码,而是您编码的字符。不知何故,您编码了 initWithBase64EncodedString 无法在 NSUTF8StringEncoding 中解码的特殊字符,使用 NSASCIIStringEncoding 代替它。

希望对你有帮助。

【讨论】:

  • 我得到了同样的错误。 “编码”返回为 null。
  • 我将其更改为 NSISOLatin1StringEncoding,我的测试用例现在可以工作了。感谢您的帮助!
猜你喜欢
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2016-12-07
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多