为什么有时候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转换成字符串.

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

  1. 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。

    在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作.一次移动操作指用一个"LX"替换一个"XL ...

  2. 字典转换成NSString(NSJson)

    //字典转换成字符串 NSDictionary *dict = [NSMutableDictionary dictionary]; NSData *data = [NSJSONSerializatio ...

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

    http://www.2cto.com/kf/201402/281501.html 1 2 3 4 5 6 NSString *str = @"0xff055008"; //先以1 ...

  4. 字符串转换成NSDate类型的 为nil解决方法

    方法一    通过下列函数来解决   但是得到的日期会改变 修改方法fix   - (NSDate *)timeForString:(NSString *)string {         NSMut ...

  5. NSString 和NSData 转换

    NSString 转换成NSData 对象 NSData* xmlData =[@"testdata" dataUsingEncoding:NSUTF8StringEncoding ...

  6. iOS NSString 和NSData 转换

    NSString 转换成NSData 对象 NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncodin ...

  7. NSString 和 NSData 转换

    NSString 转换成NSData 对象 NSData* xmlData =[@"testdata" dataUsingEncoding:NSUTF8StringEncoding ...

  8. 解决NSData转NSString返回nil的问题

    // 字符串转Data NSString *str =@"jesfds"; NSData *data =[str dataUsingEncoding:NSUTF8StringEnc ...

  9. java基础60 JavaScript字符串转换成数字(网页知识)

    1.字符串转换成数字 <!doctype html> <html> <head> <meta charset="utf-8"> &l ...

随机推荐

  1. 面试题20:搜索二叉树可能有两个元素发生了交换,如何恢复BST?

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  2. EF Core 实现多租户

    目录 SAAS 和多租户 多租户数据隔离方案 使用 EF Core 简单实现多租户 单数据库实现 多数据库实现 源代码 参考 SAAS 和多租户 SaaS(软件及服务)区别于其他应用程序的主要特征就是 ...

  3. 记录自己使用到的git命令行代码与git使用流程

    1.安装创建版本库 新建一个文件夹,用命令行实现: $ cd /d             //进入d盘 $ mkdir gitproject      //新建gitproject文件夹 $ cd ...

  4. Android 操作Sqlite

    首先要用一个类来继承SQLiteOpenHelper,并必须实现 public DatabaseHelper(Context context, String name, CursorFactory f ...

  5. Hive 编程指南—笔记

    1. 基础 1.1 Hive 解决问题的背景? 用户如何从一个现有的数据基础架构转移到 Hadoop 上,而这个基础架构是基于传统的关系数据库和 SQL 的? Hive 提供了一个被称为 HQL 的 ...

  6. POJ 2480 Longge's problem 欧拉函数—————∑gcd(i, N) 1<=i <=N

    Longge's problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6383   Accepted: 2043 ...

  7. Mybatis之reflection包源代码解析(一)

      一.序言 Mybatis作为ORM,实现了对象与关系数据库间的映射.Mybatis中的映射包含两个方面: 1.将对象中的值(parameterType所指定的对象)映射到具体的sql中,例如: & ...

  8. PL/SQL Developer 如何记住密码

    前言:使用时总结一下. 问题: 登录的时候不想每次都输入密码,能记住最好了. 解决方案: 1.点击配置->首选项 2.选择登录历史,勾上带口令存储,然后应用,确定即可.

  9. Git 学习之git 分支(三)

    Git 分支 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的 ...

  10. 移动端地区选择mobile-select-area插件的使用方法

    顾名思义,mobile-select-area插件就是使用在移动端上的进行地区选择的插件,而且使用方法简单,我就说我是怎么用的吧 一.准备工作 首先肯定要下载插件对应的css+js文件, 当你下载好这 ...