为什么有时候NSData转换成NSString的时候返回nil

有时候,NSData明明有值,可是,当转换成NSString的时候,却没有值,现在来进行测试:)

-现在提供测试用素材-

源码如下:

//
//  AppDelegate.m
//  TestNSData
//
//  Created by YouXianMing on 14-8-30.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "AppDelegate.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 获取bundle路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"YouXianMing.png"
                                                     ofType:nil];

    // 获取文件
    NSData *data = [NSData dataWithContentsOfFile:path];

    // 打印文件长度
    NSLog(@"data.length = %lu", (unsigned long)data.length);

    return YES;
}

@end

打印结果如下:

2014-08-30 07:47:16.146 TestNSData[1382:60b] Cannot find executable for CFBundle 0x8e5dfe0 </Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/System/Library/AccessibilityBundles/CertUIFramework.axbundle> (not loaded)

2014-08-30 07:47:16.193 TestNSData[1382:60b] data.length = 1210569

我们把NSData转换成NSString试一下:)

//
//  AppDelegate.m
//  TestNSData
//
//  Created by YouXianMing on 14-8-30.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "AppDelegate.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 获取bundle路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"YouXianMing.png"
                                                     ofType:nil];

    // 获取文件
    NSData *data = [NSData dataWithContentsOfFile:path];

    // 打印文件长度
    NSLog(@"data.length = %lu", (unsigned long)data.length);

    // 将NSData转换为字符串
    NSString *dataStr = [[NSString alloc] initWithData:data
                                              encoding:NSUTF8StringEncoding];

    NSLog(@"dataStr = %@", dataStr);

    return YES;
}

@end

打印结果如下:

2014-08-30 08:02:30.617 TestNSData[1459:60b] Cannot find executable for CFBundle 0x99add90 </Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/System/Library/AccessibilityBundles/CertUIFramework.axbundle> (not loaded)

2014-08-30 08:02:30.800 TestNSData[1459:60b] data.length = 1210569

2014-08-30 08:02:30.801 TestNSData[1459:60b] dataStr = (null)

注意,上面的打印是null哦:)

以下给出解释:

You can‘t convert an UIImage to NSString by using initWithData:encoding: method. This method is only for converting an string‘s data to NSString (an Text File for example).

If you are trying to convert any kind of binary data to NSString, there are some kind of encoding available. Base64 is widely used.

你不能够将UIImage通过方法initWithData:encoding:来转换.这个方法只能够转换字符格式的data(例如文本格式的文件).

如果你尝试着将任意类型的NSData转换成NSString,有许多编码可供你选择.Base64是使用最广泛的.

结论:

你只能够将字符格式的NSData转换成字符串.

时间: 2024-11-08 06:40:48

为什么有时候NSData转换成NSString的时候返回nil的相关文章

iOS中NSString转换成HEX(十六进制)-NSData转换成int

http://www.2cto.com/kf/201402/281501.html 1 2 3 4 5 6 NSString *str = @"0xff055008"; //先以16为参数告诉strtoul字符串参数表示16进制数字,然后使用0x%X转为数字类型 unsigned long red = strtoul([str UTF8String],0,16); //strtoul如果传入的字符开头是“0x”,那么第三个参数是0,也是会转为十六进制的,这样写也可以: unsigned

IOS NSData 转换成 NSDictionary

当我们通过URLRequest获取到返回的数据时,如果返回的结果是JSON格式的数据,我们需要将返回的NSData转换成NSDictionary. ? ??NSData *returnData = [ NSURLConnection sendSynchronousRequest: request returningResponse:&response error:&err];//获取网络链接返回的数据 ? ? NSDictionary *content = [NSJSONSerializa

NSData转换成NSDictionary

在进行网络数据通信的时 候,经常会遇到NSData类型的数据.在该数据是dictionary结构的情况下,系统没有提供现成的转换成NSDictionary的方法,为此可 以通过Category对NSDictionary进行扩展,以支持从NSData到NSDictionary的转换.声明和实现如下: @interface NSDictionary (Helpers)+ (NSDictionary *)dictionaryWithContentsOfData:(NSData *)data;@end

ios nsnumber怎么转换成nsstring

NSString *String = [NSString StringWithFormat:@"%@",number];或者NSString *String = number.description;

iOS NSString 和NSData 转换

NSString 转换成NSData 对象 NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncoding]; NSData 转换成NSString对象 NSData * data; NSString *result = [[NSString alloc] initWithData:data  encoding:NSUTF8StringEncoding]; NSData 转换成char* NSData *dat

解决NSData转NSString返回nil的问题

在使用initWithData等方法将NSData转换成NSString时,如果NSData的内容含有非encoding编码的字符,将会返回nil. ----------SDK文档如下------------- - (instancetype)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding; Return Value An NSString object initialized by converting the b

delphi将图片转换成Base64编码函数

{************************************************************************** 名称: BaseImage 参数: fn: TFilename 返回值: string 功能: 将fn文件转换成Base64编码,返回值为编码 **************************************************************************} function BaseImage(fn: str

FMDB使用的一点心得:数据库创建、制表、查询等以及image转换成二进制nsdata保存到数据库中

<span style="font-size:18px;">//首先,获取数据库的路径,(如果不存在,就是我们想要存储的路径),不用担心每次都创建数据库会重复,不会的,如果没有则创建,有了就不会再重复创建: //接下来,我们要制表,首先我们先查看我们的表是否已经存在,方法在下面代码中:如果存在则跳过,不存在则创建</span> -(void)DataBaseInit { //获取Document文件夹下的数据库文件,没有则创建 NSString *dbPath

将字典或者数组转换成JSON数据或者字符串

源码: NSDictionary+JSON.h 与 NSDictionary+JSON.m // // NSDictionary+JSON.h // Category // // Created by YouXianMing on 15-2-09. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> @interface NSDictionary (JSON)