【问题标题】:Getting Junk and special character while decoding string [closed]解码字符串时获取垃圾和特殊字符[关闭]
【发布时间】:2013-02-19 09:57:49
【问题描述】:

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

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

我必须做些什么才能使它成为普通字符串? 谁能帮我解决这个问题?

【问题讨论】:

  • 也许您可以发布您的解码代码和编码字符串的示例。
  • 您是否尝试使用 ASCII 而不是 Base64 解码字符串?如果不尝试一次。 = [ stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
  • 查看this链接
  • 我要发布答案,为 100,555。如果您愿意,请取消删除它。

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


【解决方案1】:

往这边走

  1. here下载Base64文件

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

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

  4. #import "NSData+Base64.h" 到您的文件中

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

    base64Encode

    base64解码

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

#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

这是结果屏幕

【讨论】:

  • 它会转换编码字符串(textfield.text)中的特殊字符吗?
【解决方案2】:

我使用以下方法进行 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;
}

【讨论】:

    【解决方案3】:
    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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      相关资源
      最近更新 更多