[英]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.