我在解码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)
关于发生了什么的任何想法?在任何一种情况下,解码的字符串都是不正确的,并且重新编码检查不会产生原始字符串。
答案 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
希望我帮助过。