【问题标题】:Objective-C Base64 decoding returns nilObjective-C Base64 解码返回 nil
【发布时间】:2013-11-29 00:34:29
【问题描述】:

我已经下载并添加了以下类别到我的项目中:https://github.com/nicklockwood/Base64

NSString *secret = @"7pgj8Dm6";
NSString *decodedSecret = [secret base64DecodedString];
NSLog(@"decoded Secret = %@", decodedSecret);

然而,结果总是为零。这里发生了什么?

【问题讨论】:

  • 在调试器中单步调试。
  • 我面临同样的问题。对于您的特定输入 7pgj8Dm6,我使用的两个不同的在线解码器提供了两个不同的结果:-) 所以我想知道这是一个有效的 base64

标签: objective-c macos cocoa base64


【解决方案1】:

希望对你有帮助

NSString *decodeString = @"Raja";

编码字符串

NSData *encodeData = [decodeString dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String = [encodeData base64EncodedStringWithOptions:0];
DLog(@"Encode String Value: %@", base64String);

解码字符串

NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
DLog(@"Decode String Value: %@", base64String);  

谢谢

【讨论】:

  • @MartinE。上面一个用完会遇到什么
  • “Raja”字符串? ...也没有
【解决方案2】:

我未能充分放松 iOS 原生 base64 解码器,使用 NSDataBase64DecodingIgnoreUnknownCharacters 来处理 jwt 有效负载 所以我不得不恢复到 3rdparty MF_Base64Codec

遗憾的是,您可能要考虑使用 3rdparty 路线 直到 Apple 修复错误或进一步放宽解码器 接受它目前认为的垃圾输入

【讨论】:

    【解决方案3】:

    您的输入 7pgj8Dm6 是无效的 base64 编码字符串。因此结果将始终为零,因为 base64DecodedString 方法仅用于 UTF8 encoding

    从 iOS 7 和 Mac OS 10.9 开始,不再需要 this library

    你可以使用initWithBase64EncodedString:options:

    此方法的默认实现将拒绝非字母字符,包括换行符。要支持不同的编码并忽略非字母字符,请将选项值指定为 NSDataBase64DecodingIgnoreUnknownCharacters

    【讨论】:

      猜你喜欢
      • 2016-07-21
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多