为什么有时候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. Windows下整合apache和Tomcat

    1.前言: 引用:http://www.cnblogs.com/liaokailin/p/3963603.html 引用的博客里面有比较详细的说明,并且结合图片,非常生动: 我这里只做简单的说明和整合 ...

  2. php里的二进制安全

    二进制安全功能(binary-safe function)是指在一个二进制文件上所执行的不更改文件内容的功能或者操作.这能够保证文件不会因为某些操作而遭到损坏.二进制数据是按照一串0和 1的形式编码的 ...

  3. linux xargs 命令详解

    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从 ...

  4. 软件级负载均衡器(LVS/HAProxy/Nginx)的特点简介和对比

    本文出自 “抚琴煮酒” 博客,出处http://andrewyu.blog.51cto.com/1604432/697466   现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶 ...

  5. MVC页面缓存

    1.OutputCache 属性 contact.cshtml    [OutputCache(Duration=10)] public ActionResult Contact()   {      ...

  6. 使用swagger实现web api在线接口文档(转载)

    一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...

  7. Node.js学习笔记(八) --- Node.js的路由模块封装

    1 .模块化的方式封装 整理中… 2 .封装仿照 express 的路由整理中…

  8. Differences between write through and write back

    https://stackoverflow.com/questions/27087912/write-back-vs-write-through

  9. Leetcode 计划

    如何正确高效地使用LeetCode? LeetCode按照怎样的顺序来刷题比较好? LeetCode 题目总结/分类 Leetcode 简略题解 - 共567题 500. Keyboard Row [ ...

  10. centos7下更新firefox

    下载最新版firefox 1.点击三条线-问号-firefox帮助-安装和更新-linux安装-系统和语言下载 保存到指定目录,比如home下 2.解压 tar xjf firefox-*.tar.b ...