NSData到NString转换问题 [英] NSData to NString conversion problem
问题描述
帮助将不胜感激。
更新:
向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屋!