今天用TFHpple解析html,发现老报错encoding error : input conversion failed due to input error, bytes  I/O error : encoder error

一看就知道是编码的问题啊,但是我明明已经NSData (GB-2312)----------->nsstring------->(NSUTF-8)NSData
把这些变量打出来应该也没有错,事后发现原来是,没有执行这一步
将其中一行的<meta http-equiv="Content-Type" content="text/html; charset=gb2312">转换成UTF-8形式的
 

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

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

具体代码如下:

 // 1. 获取Data
NSURL *postDetailUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", BASEURL, self.topicUrl]];
NSData *postDetailHtmlData = [NSData dataWithContentsOfURL:postDetailUrl]; // 2. 转码成utf8Data:先转成gb2312, 替换meta, 然后转成utf8
NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *postHtmlStr = [[NSString alloc] initWithData:postDetailHtmlData encoding:gbkEncoding]; NSString *uft8HtmlStr = [postHtmlStr stringByReplacingOccurrencesOfString:@"<meta HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=gb2312\">" withString:@"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"];
NSData *utf8HtmlData = [uft8HtmlStr dataUsingEncoding:NSUTF8StringEncoding];

http://blog.csdn.net/toolazytoname/article/details/10051681

iOS开发-- TFHpple抓取GB-2312编码的html页面,页面返回编码错误的更多相关文章

  1. fiddler抓包工具 https抓取 ios手机端抓取

    fiddler抓包工具 https抓取 ios手机端抓取  转载链接:https://www.cnblogs.com/bais/p/9118297.html   抓取pc端https请求,ios手机端 ...

  2. iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

    在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...

  3. Android MaoZhuaWeiBo开发Service抓取个人信息-2

    前面把基本的东西讲完了,之后就是数据的获取和解析显示出来了,那接下来我们就负责抓取数据的这块吧,首先我们须要 在清单文件中载入服务和活动 加入:. <activity android:name= ...

  4. NodeJs爬虫抓取古代典籍,共计16000个页面心得体会总结及项目分享

    项目技术细节 项目大量用到了 ES7 的async 函数, 更直观的反应程序了的流程.为了方便,在对数据遍历的过程中直接使用了著名的async这个库,所以不可避免的还是用到了回调promise ,因为 ...

  5. iOS开发:一个无限滚动自动播放图片的Demo(Swift语言编码)

    很久以前就想写这么一个无限滚动的Demo了,最近学习了下Swift,手中没有可以用来练手的Demo,所以才将它实现了. Github地址(由于使用了UIView+AutoLayout第三方进行布局,所 ...

  6. 【ios开发之疑难杂症】xcode运行出现SpringBoard 无法启动应用程序(错误:7)

    问题:xcode运行出现SpringBoard 无法启动应用程序(错误:7) 解决方案: 重启模拟器

  7. iOS开发之--改变系统导航的颜色,字体,还有返回样式的自定义

    在写项目的工程中,我们可能会遇到各种各样的项目,写的方法也是各有不同,不喜欢自定义的小伙伴也很多, 下面我就记录下系统导航和barbuttonitem的修改系统空间的方法: 1,添加rightbarb ...

  8. IOS开发---菜鸟学习之路--(八)-实现新闻页面

    本章将具体讲述如何结合前两张的内容最终实现一个新闻页面的雏形 之所以称之为雏形,是因为本章实现的内容只是实现了最基础的效果 还有很多其他诸如下拉刷新 页面导航等效果都需要投入一些时间进行研究 好了直接 ...

  9. ios开发之自己定义默认生成的导航栏 标题 颜色 返回button

    一 改动导航栏颜色    导航栏在哪个页面代码放在那里面 self.navigationController.navigationBar.tintColor = [UIColor colorWithR ...

随机推荐

  1. 与TIME_WAIT相关的几个内核参数修改测试讨论结论

    以下来结论自tcpcopy & gryphon讨论群 经过试验测试得出,不保证肯定正确.   net.ipv4.tcp_tw_recycle net.ipv4.tcp_tw_reuse net ...

  2. class-dump 使用

    转:class-dump 使用 class-dump 官网地址:这里 我这里下载的是 class-dump-3.5.dmg 版本的.双击.dmg 文件,将  拉倒 /usr / local / bin ...

  3. Swift学习笔记(十四)——字符,常量字符串与变量字符串

    在学习Java过程中,字符串碰到过String和StringBuffer,当中前者是不可变的,不能对字符串进行改动:后者是可变的,能够不断改动. 来到Swift中,对字符串的定义变的更加简单. (1) ...

  4. 基础知识:什么是ASP.NET Razor页面?

    Razor页面与ASP.NET MVC开发使用的视图组件非常相似,它们具有所有相同的语法和功能. 最关键的区别是模型和控制器代码也包含在Razor页面中.它更像是一个MVVM(Model-View-V ...

  5. PL/SQL学习笔记之变量、常量、字面量、字符串

    一:变量 1:变量声明与初始化 variable_name datatype(约束) [:= | DEFAULT 初始值] 如: sales , ); name ); a ; greetings ) ...

  6. 前后分离模型之封装 Api 调用

    Ajax 和异步处理 调用 API 访问数据采用的 Ajax 方式,这是一个异步过程,异步过程最基本的处理方式是事件或回调,其实这两种处理方式实现原理差不多,都需要在调用异步过程的时候传入一个在异步过 ...

  7. 基于Centos体验自然语言处理 by PHP SDK

    系统要求:CentOS 7.2 64 位操作系统 准备工作 获取 SecretId 和 SecretKey1 前往 密钥管理 页面获取你的 SecretId 和 SecretKey 信息,这些信息将会 ...

  8. android保持服务不休眠(持续运行)以及唤醒屏幕的方法

    假设有这样一个应用场景,一个服务一直在默默的工作(比如即时地获取服务器的消息),即使在屏幕已经因为长时间无操作而关闭,或者用户按了电源键让屏幕关闭,手机进入休眠状态,他必须依然在工作中.一旦从服务器获 ...

  9. Nginx 限制访问速率

    本文测试的nginx版本为nginx version: nginx/1.12.2 Nginx 提供了 limit_rate 和limit_rate_after,举个例子来说明一下在需要限速的站点 se ...

  10. JAVA代码实现多级树结构封装对象

    树结构在开发中经常遇到.例如:部门.菜单.员工架构等等.下面用部门作为例子构造部门结构树 1.部门表:dept -- ---------------------------- -- Table str ...