5 iphone encoding utf-8 nsstring nsdata
我得到一个HTML文件作为NSData,需要提取它的一些部分.为此,我需要使用UTF8编码将其转换为NSString.问题是这种转换失败,可能是因为NSData包含对UTF8无效的字节.我试图获取数据的字节数组并重复它,但每次我遇到非ASCII字符(例如希伯来字母)时,我得到了jibrish.
帮助将不胜感激.
更新:
对戈登 - NSData生成如下:
NSData *theData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError];
Run Code Online (Sandbox Code Playgroud)
当我说转换失败时,我的意思是
[[NSString alloc] initWithData:temp encoding:NSUTF8StringEncoding]
Run Code Online (Sandbox Code Playgroud)
返回零
To 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];
Run Code Online (Sandbox Code Playgroud)
}
小智 6
我知道这是一个古老的话题,但是当我今天寻找解决方案时,它就出现了.我现在已经解决了,所以我只是将其发布给其他可能会遇到此页面寻找解决方案的人.
这是我在异步请求中所做的事情:
我首先将文本编码名称存储在connection:didReceiveResponse中
encodingName = [[NSString alloc] initWithString:[response textEncodingName]];
Run Code Online (Sandbox Code Playgroud)
然后在我使用的connectionDidFinishLoading方法中
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding((CFStringRef) encodingName));
NSString *payloadAsString = [[NSString alloc] initWithData:receivedData encoding:encoding];
Run Code Online (Sandbox Code Playgroud)
致戈登 - NSData 生成如下:
NSData *theData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError];
Run Code Online (Sandbox Code Playgroud)
当我说转换失败时,我的意思是
[[NSString alloc] initWithData:temp encoding:NSUTF8StringEncoding]
Run Code Online (Sandbox Code Playgroud)
返回零
致 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];
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
7489 次 |
| 最近记录: |