我遇到了一个问题。 当我尝试使用 Base64 解码字符串时,它将返回一些特殊字符作为响应。如果我们尝试使用此字符串,则应用程序崩溃。下面是从解码值获得的代码字符串。
64B´%4àîÈÝ%ZÌ%
´E@/vÀ6mԶŪÜ
我需要做些什么来使它成为正常的字符串? 任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
我使用了以下方法进行base64编码/解码...
- (NSString *)base64Encode:(NSString *)plainText
{
NSData *plainTextData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String = [plainTextData base64EncodedString];
return base64String;
}
- (NSString *)base64Decode:(NSString *)base64String
{
NSData *plainTextData = [NSData dataFromBase64String:base64String];
NSString *plainText = [[NSString alloc] initWithData:plainTextData encoding:NSUTF8StringEncoding];
return plainText;
}
答案 1 :(得分:1)
走这条路
从here
从下载的文件夹中取出这两个文件( NSData + Base64.h,NSData + Base64.m )并添加到您的项目中。
为这些新添加的文件禁用ARC(如果在项目中启用ARC)
#import“NSData + Base64.h”进入您的档案
使用以下两种方法来完成您的任务
base64Encode
base64Decode
这是我的代码片段,我在演示示例中的表现
#import "ViewController.h"
#import "NSData+Base64.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize messageTextField;
@synthesize resultBase64Label;
@synthesize resultPlainTextLabel;
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (IBAction)convertToBase64:(id)sender {
//keypad go back
[messageTextField resignFirstResponder];
NSString *resultBase64String = [self base64Encode:messageTextField.text];
resultBase64Label.text = resultBase64String;
}
- (IBAction)convertToPlainText:(id)sender {
NSString *resultPlainString = [self base64Decode:resultBase64Label.text];
resultPlainTextLabel.text = resultPlainString;
}
//convert plain text o base64
- (NSString *)base64Encode:(NSString *)plainText
{
NSData *plainTextData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String = [plainTextData base64EncodedString];
return base64String;
}
//convert base64 to plain text
- (NSString *)base64Decode:(NSString *)base64String
{
NSData *plainTextData = [NSData dataFromBase64String:base64String];
NSString *plainText = [[NSString alloc] initWithData:plainTextData encoding:NSUTF8StringEncoding];
return plainText;
}
@end
这是结果屏幕
希望这有帮助,让我知道你在这方面有任何麻烦。
答案 2 :(得分:0)
NSString *bufferStr = @"64B´%4àîÈÝ%ZÌ%´E@/vÀ6mԶŪÜ";
NSData *temp = [bufferStr dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *dst = [[[NSString alloc] initWithData:temp encoding:NSASCIIStringEncoding] autorelease];
NSLog(@"converted: %@", dst);
或使用encoding:NSNonLossyASCIIStringEncoding
这是official documentation refere it might be helpful for you.