NSData到NString转换问题 [英] NSData to NString conversion problem

查看:108
本文介绍了NSData到NString转换问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到一个HTML文件作为NSData,需要提取它的一些部分。为此,我需要将其转换为NSString与UTF8编码。事情是这种转换失败,可能是因为NSData包含对UTF8无效的字节。我已经尝试获取数据的字节数组,然后再过来,但是每次遇到非ASCII字符(例如希伯来字母),我都会得到jibrish。



帮助将不胜感激。



更新:



向Gordon生成的NSData:

  NSData * theData = [NSURLConnection sendSynchronousRequest:theRequest returnedResponse:& theResponse错误:& theError]; 

当我说转换失败时,我的意思是

  [[NSString alloc] initWithData:temp encoding:NSUTF8StringEncoding] 

返回nil



对于Ed - 这是我的代码(我从NSData获得了Byte数组,找到了我需要的,并从中构造了另一个Byte数组 - 将其转换为NSData,然后尝试将其转换为NSString ...听起来很复杂...)

   - (NSString * )UTF8StringFromData:(NSData *)theData {
Byte * arr = [theData bytes];
NSUInteger begin1 = [self findIndexOf:@< li> bArr:arr size:[theData length]] + 4;
NSUInteger end1 = [self findIndexOf:@< / li>< / ol> bArr:arr size:[theData length]];
字节* arr1 =(字节*)malloc(sizeof(Byte)*((end1-begin1 + 1)));
NSLog(@%d%d,begin1,end1);
int j = 0; (int i = begin1; i< end1; i ++)
{
arr1 [j] = arr [i];
j ++;
}
arr1 [j] ='\0';
NSData * temp = [NSData dataWithBytes:arr1 length:j];

return [[NSString alloc] initWithData:temp encoding:NSUTF8StringEncoding];

}

解决方案

我知道这是一个老主题,但是当我在寻找解决方案时,它已经出现了。我现在已经解决了,所以我只是发布给可能遇到这个页面的其他人寻找一个解决方案。



这是我在异步请求中所做的:



我首先在连接中存储文本编码名称:didReceiveResponse使用

   

然后在我的connectionDidFinishLoading方法后面我使用

  NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef)encodingName)); 
NSString * payloadAsString = [[NSString alloc] initWithData:receivedData encoding:encoding];


I'm getting an HTML file as NSData and need to extract some parts of it. For that I need to convert it to NSString with UTF8 encoding. The thing is that this conversion fails, probably because the NSData contains bytes that are invalid for UTF8. I have tried to get the byte array of the data and go over it, but each time I come across non ASCII character (hebrew letters for example) I get jibrish.

Help will be appreciated.

UPDATE:

To Gordon - the NSData generated like that:

    NSData *theData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError];

When I say that the conversion fails I mean that

[[NSString alloc] initWithData:temp encoding:NSUTF8StringEncoding]

returns nil

To Ed - Here is my code (I got the Byte array from NSData, found what I need, and constructed another Byte array from that - turned it to NSData and then attempted to convert it to NSString... sounds kinda complicated...)

-(NSString *)UTF8StringFromData:(NSData *)theData{
Byte *arr = [theData bytes];
NSUInteger begin1 = [self findIndexOf:@"<li>" bArr:arr size:[theData length]]+4;
NSUInteger end1 = [self findIndexOf:@"</li></ol>" bArr:arr size:[theData length]];
Byte *arr1 = (Byte *)malloc(sizeof(Byte)*((end1-begin1+1)));
NSLog(@"%d %d",begin1, end1);
int j = 0;
for (int i = begin1; i < end1; i++){
    arr1[j] = arr[i];
    j++;
}
arr1[j]='\0';
NSData *temp = [NSData dataWithBytes:arr1 length:j];

return [[NSString alloc] initWithData:temp encoding:NSUTF8StringEncoding];

}

解决方案

I know this is an old topic but it came up when I was looking for the solution today. I've solved it now so I'm just posting it for others who might run into this page looking for a solution.

Here's what I do in an asynchronous request:

I first store the text encoding name in connection:didReceiveResponse using

encodingName = [[NSString alloc] initWithString:[response textEncodingName]];

Then later in my connectionDidFinishLoading method I used

NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef) encodingName));
NSString *payloadAsString = [[NSString alloc] initWithData:receivedData encoding:encoding];

这篇关于NSData到NString转换问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆