将NSData转换为NSString时出错

时间:2012-12-20 08:03:18

标签: objective-c xcode nsdata

我在数据库中保存图像。我正在尝试获取图像并将其导出为CSV文件。 我使用以下代码转换为字符串,但它返回null。

   int length = sqlite3_column_bytes(compiledStatement, i); 
   NSData *img =[NSData dataWithBytes:sqlite3_column_blob(compiledStatement, i) length:length];
   text = [[NSString alloc] initWithData:img encoding:NSUTF8StringEncoding];

   NSLog(@"ColName : %@, TEXT : %@",colName, text); //Text displayed is (NULL)

当我保存图像时,我将图像转换为NSData,然后将其插入数据库列。保存图像的列的数据类型为“blob”。

提前致谢。

2 个答案:

答案 0 :(得分:2)

initWithData:encoding:编码参数指定了数据的编码,而不是String的编码。如果数据实际上不是UTF-8,则转换将失败,返回的字符串将为空。

看到您的数据是二进制的,几乎100%保证转换遇到无效的UTF-8字节序列并中止。

虽然我不建议将图像数据序列化为字符串,但如果你绝对必须这样做,那么你应该首先对数据进行Base-64编码,如this SO post中所述。

答案 1 :(得分:1)

也许尝试用于从数据中获取图像

[NSKeyedUnarchiver unarchiveObjectWithData:yourData]

并保存到您的数据

 NSData *newData = [NSKeyedArchiver archivedDataWithRootObject:yourObject];

我用它将图像和其他内容保存到我的核心数据中。