解码字符串时获取垃圾和特殊字符

时间:2013-03-05 05:17:23

标签: iphone ios objective-c xcode cocoa-touch

我遇到了一个问题。 当我尝试使用 Base64 解码字符串时,它将返回一些特殊字符作为响应。如果我们尝试使用此字符串,则应用程序崩溃。下面是从解码值获得的代码字符串。

64B´%4àîÈÝ%ZÌ%
´E@/vÀ6mԶŪÜ

我需要做些什么来使它成为正常的字符串? 任何人都可以帮我解决这个问题吗?

3 个答案:

答案 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)

走这条路

  1. here

  2. 下载Base64文件
  3. 从下载的文件夹中取出这两个文件( NSData + Base64.h,NSData + Base64.m )并添加到您的项目中。

  4. 为这些新添加的文件禁用ARC(如果在项目中启用ARC)

  5. #import“NSData + Base64.h”进入您的档案

  6. 使用以下两种方法来完成您的任务

    base64Encode

    base64Decode

  7. 这是我的代码片段,我在演示示例中的表现

    #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
    

    这是结果屏幕

    enter image description here

    希望这有帮助,让我知道你在这方面有任何麻烦。

答案 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.