Base 64编码/解码

时间:2014-11-29 07:00:54

标签: ios objective-c base64

我在解码Base64字符串时遇到问题。这是相关代码(在类别文件中):

- (NSString *)base64DecodedString {
    NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:self options:0];
    NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSASCIIStringEncoding];

    NSLog(@"Encoded String: %@\n"
           "Decoded String: %@\n"
           "Reencoded Check: %@\n", self, decodedString, [decodedString base64EncodedString]);

    return decodedString;
}

- (NSString*)base64EncodedString {
    NSData *encodedData = [self dataUsingEncoding:NSASCIIStringEncoding];
    NSString *encodedString = [encodedData base64EncodedStringWithOptions:0];

    return encodedString;
}

使用NSASCIIStringEncoding,在调用base64DecodedString类别方法时,我得到以下输出:

Encoded String: XMEBbbUGO4wuZ8Eljx6x8Q==
Decoded String: \Ámµ;.gÁ%±ñ
Reencoded Check: (null)

Encoded String: NBbA3SzI5j8ioOTeQC5WxNvEFNg0WFy4nRjmCSdypCI=
Decoded String: 4ÀÝ,Èæ?" äÞ@.VÄÛÄØ4X\¸æ 'r¤"
Reencoded Check: (null)

使用上面相同的代码,但使用NSUTF8StringEncoding我得到以下输出:

Encoded String: oP6u7jErDp4KHzC6WmzHEw==
Decoded String: (null)
Reencoded Check: (null)

Encoded String: qjne07HA4PFIFrwTP9E/ejK6XtWoFtbgdDTpL8wmfgY=
Decoded String: (null)
Reencoded Check: (null)

关于发生了什么的任何想法?在任何一种情况下,解码的字符串都是不正确的,并且重新编码检查不会产生原始字符串。

1 个答案:

答案 0 :(得分:-1)

我建议您尝试使用更多NSUTF8StringEncoding。对于实例:

- (NSString *)base64DecodedString {
NSString *tempString = @"Here you come";
NSData *data = [tempString dataUsingEncoding:NSUTF8StringEncoding];
NSString *decodedData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"Simple String: %@\n"
      "Decoded String: %@\n"
      , tempString, decodedData);
return nil;

}

在您的情况下[[NSData alloc] initWithBase64EncodedString:self options:0];返回nil。(当我尝试时)。 简单的例子: iOS 7: Base64 Encode and Decode NSData and NSString Objects

希望我帮助过。