欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

编码 data:text/html;c,iOS 用TFHpple抓取GB-2312编码的html页面,页面返回编码错误

发布时间:2025/5/22 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 编码 data:text/html;c,iOS 用TFHpple抓取GB-2312编码的html页面,页面返回编码错误 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

HTMLParser方法可以参考https://github.com/zootreeves/Objective-C-HMTL-Parser

TFHpple方法的使用可以看https://github.com/topfunky/hpple

TFHpple,因为它很简单,也好用,但是它的功能不是很完完善。比如,不能获取children node。它是用XPath来定位和解析html或者xml。

hpple解析html中可能存在的问题:http://www.ccbase.net/post/66.html

具体的方法可以参考:(英文网址介绍)http://stackoverflow.com/questions/405749/parsing-html-on-the-iphone

(中文网址介绍)http://blog.csdn.net/xiaoxuan415315/article/details/7788955;还要代码下载,不过里面有错

Objective c代码

NSData *htmlData = [NSString stringWithContentsOfFile:[NSURL URLWithString:@"http://www.baidu.com"] encoding:NSUTF8StringEncoding error:nil];

会报:[NSURL getFileSystemRepresentation:maxLength:]: unrecognized selector sent to instance 0x6bcad20

Objective c代码

NSData *htmlData  = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.baidu.com"] encoding:NSUTF8StringEncoding error:nil];

匹配还是有问题

应该这个更合适点

Objective c代码

NSData *htmlData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.baidu.com"]];

下面讲一下我自己实现的过程中的关键代码:

解析非utf-8页面的思路 :

把网络流返回的NSDate的GB2312(假设是这个)转换成TFHpple能正确解析的UTF-8编码的NSData;

将其中一行的转换成UTF-8形式的

可以采用如下两种方案解决:

方法一:

Objective c代码

//转换成GBK编码

NSStringEncoding gbEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

NSData *htmlData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"可以是非utf-8的网页"]];

NSString *htmlStr = [[[NSString alloc] initWithData:htmlData encoding:gbEncoding] autorelease];

方法二:

Objective c代码

NSData *htmlData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"可以是非utf-8的网页"]];

CFStringRef bgCFStr = CFStringCreateWithBytes(NULL, [htmlData bytes], [htmlData length], kCFStringEncodingGB_18030_2000, false);

NSString *gbHtmlStr = (NSString *)bgCFStr;

方法一或者二选其一,然后加下面的代码就可以实现简单解析了

Objective c代码

NSString *utf8HtmlStr = [htmlStr stringByReplacingOccurrencesOfString:@""

withString:@""];

NSData *htmlDataUTF8 = [utf8HtmlStr dataUsingEncoding:NSUTF8StringEncoding];

TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlDataUTF8];

NSArray *elements  = [xpathParser search:@"//option"];

TFHppleElement *element = [elements objectAtIndex:0];

NSString *h3Tag = [element content];

NSLog(@"%@",h3Tag);

mLabel.text = h3Tag;

[xpathParser release];

[htmlData release];

很有用的网址:http://www.raywenderlich.com/14172/how-to-parse-html-on-ios

碰到的问题:NSData --》NSString

NSData*htmlData = [htmlStrdataUsingEncoding:NSUTF8StringEncoding];

NSString --》NSData

NSString*htmlStr = [[[NSStringalloc]initWithData:htmlDataencoding:NSUTF8StringEncoding]autorelease];

总结

以上是生活随笔为你收集整理的编码 data:text/html;c,iOS 用TFHpple抓取GB-2312编码的html页面,页面返回编码错误的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。