从http标头中提取base64编码数据为NSData或NSString?

时间:2017-07-13 15:38:58

标签: ios objective-c

我需要从http标头中提取一些数据。在由服务器发送之前,数据已经过base64编码,然后进行URL编码。标题如下:

<snip>
Server = Apache;
"Transfer-Encoding" = Identity;
"Www-Authenticate" = "Basic realm=\"itYNcEpMfSPfewXAOte3II6xXsM6aNBO197bBuvb9gvWVl7Xo%2FQJ9j9r0hHz0k12xLRqlyvczoCM7kI9q1opHj%2BKYiPz73DqypNFgYGleR3n0bcVTto80Hq55i6nsgPaCnHrWJOdQs1HY%2FzzuK6vbZYAIofiB7VKSwdi00ZmkbQi9Pi05i4lCaCu%2FwV%2FXOOS95oL8TQ%3D\"";

为了删除URL编码和base64编码,我应该将原始头数据提取为NSString还是NSData?

NSString* option1 = [header objectForKey: @"Www-Authenticate"];
NSData* option2 = [header objectForKey: @"Www-Authenticate"];

选择一个是否重要,或者两个选项是否可以同等使用?

(注意我不是要问如何从Base64解码URL编码和解码,我问的问题是起点应该是NSString还是NSData以及为什么,或者无关紧要。)

2 个答案:

答案 0 :(得分:0)

base64这是字符串,您可以将其转换为NSData。

NSString* option1 = [header objectForKey: @"Www-Authenticate"];
NSData *data = [NSData dataFromBase64String:option1];

答案 1 :(得分:-2)

- (NSString*)encodeTo64:(NSString*)fromString
{
    NSData *plainData = [fromString dataUsingEncoding:NSUTF8StringEncoding];
    NSString *base64String;
    if ([plainData respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
        base64String = [plainData base64EncodedStringWithOptions:kNilOptions];  // iOS 7+
    } else {
        base64String = [plainData base64Encoding];                              // pre iOS7
    }


    return base64String;
}