gpt4 book ai didi

iphone - NSData 到 NString 转换问题

转载 作者:行者123 更新时间:2023-12-03 18:57:03 25 4
gpt4 key购买 nike

我正在获取一个 NSData 形式的 HTML 文件,并且需要提取其中的某些部分。为此,我需要将其转换为 UTF8 编码的 NSString。问题是这个转换失败了,可能是因为 NSData 包含对 UTF8 无效的字节。我尝试获取数据的字节数组并对其进行检查,但每次遇到非 ASCII 字符(例如希伯来字母)时,我都会感到困惑。

我们将不胜感激。

更新:

致 Gordon - 像这样生成的 NSData:

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

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

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

返回零

致 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]];
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];

}

最佳答案

我知道这是一个老话题,但在我今天寻找解决方案时出现了。我现在已经解决了这个问题,所以我只是将其发布给可能会进入此页面寻找解决方案的其他人。

这是我在异步请求中执行的操作:

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

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

然后在我的connectionDidFinishLoading方法中我使用了

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

关于iphone - NSData 到 NString 转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1415039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com