`
473687880
  • 浏览: 484248 次
文章分类
社区版块
存档分类
最新评论

iOS html解析1(包含中文字符)

 
阅读更多

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

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

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


xpath教程:http://www.w3school.com.cn/xpath/index.asp

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

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

Objective c代码收藏代码
  1. <span>NSData*htmlData=[NSStringstringWithContentsOfFile:[NSURLURLWithString:@"http://www.baidu.com</span>"]encoding:NSUTF8StringEncodingerror:nil];

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

Objective c代码收藏代码
  1. NSData*htmlData=[NSStringstringWithContentsOfURL:[NSURLURLWithString:@"http://www.baidu.com"]encoding:NSUTF8StringEncodingerror:nil];

匹配还是有问题

应该这个更合适点

Objective c代码收藏代码
  1. <span>NSData*htmlData=[NSDatadataWithContentsOfURL:[NSURLURLWithString:@"http://www.baidu.com
  2. </span>"]];

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

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

  1. 把网络流返回的NSDate的GB2312(假设是这个)转换成TFHpple能正确解析的UTF-8编码的NSData;
  2. 将其中一行的<meta http-equiv="Content-Type" content="text/html; charset=gb2312">转换成UTF-8形式的

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

方法一:

Objective c代码收藏代码
  1. //转换成GBK编码
  2. NSStringEncodinggbEncoding=CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
  3. NSData*htmlData=[NSDatadataWithContentsOfURL:[NSURLURLWithString:@"可以是非utf-8的网页"]];
  4. NSString*htmlStr=[[[NSStringalloc]initWithData:htmlDataencoding:gbEncoding]autorelease];

方法二:

Objective c代码收藏代码
  1. NSData*htmlData=[NSDatadataWithContentsOfURL:[NSURLURLWithString:@"可以是非utf-8的网页"]];
  2. CFStringRefbgCFStr=CFStringCreateWithBytes(NULL,[htmlDatabytes],[htmlDatalength],kCFStringEncodingGB_18030_2000,false);
  3. NSString*gbHtmlStr=(NSString*)bgCFStr;

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

Objective c代码收藏代码
  1. NSString*utf8HtmlStr=[htmlStrstringByReplacingOccurrencesOfString:@"<metahttp-equiv=\"Content-Type\"content=\"text/html;charset=gb2312\">"
  2. withString:@"<metahttp-equiv=\"Content-Type\"content=\"text/html;charset=utf-8\">"];
  3. NSData*htmlDataUTF8=[utf8HtmlStrdataUsingEncoding:NSUTF8StringEncoding];
  4. TFHpple*xpathParser=[[TFHpplealloc]initWithHTMLData:htmlDataUTF8];
  5. NSArray*elements=[xpathParsersearch:@"//option"];
  6. TFHppleElement*element=[elementsobjectAtIndex:0];
  7. NSString*h3Tag=[elementcontent];
  8. NSLog(@"%@",h3Tag);
  9. mLabel.text=h3Tag;
  10. [xpathParserrelease];
  11. [htmlDatarelease];

很有用的网址: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];

分享到:
评论

相关推荐

    UIWebView的使用代码

    IOS中,当你长按一个触控对象时,如链接,safari会弹出包含链接信息的菜单。禁用此行为CSS代码 ? 1 2 3 .disable-callout{ -webkit-touch-callout:none ; } 或在webViewDidFinisheLoad中使用 ? 1 ...

    java开源包1

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    JAVA上百实例源码以及开源项目源代码

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java开源包11

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包2

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包3

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包6

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包5

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包10

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包4

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包8

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包7

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包9

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    java开源包101

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

    Java资源包01

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。 异步HTTP客户端开发包 HttpAsyncClient HttpAsyncClient 是一个异步的 HTTP 客户端开发包,基于 HttpCore NIO 和 HttpClient ...

Global site tag (gtag.js) - Google Analytics