繁体   English   中英

Base 64编码/解码

[英]Base 64 encoding / decoding

我在解码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)

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

我建议您尝试使用更多的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编码和解码NSData和NSString对象

希望我能帮上忙。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM