zoukankan      html  css  js  c++  java
  • iOS开发-- TFHpple抓取GB-2312编码的html页面,页面返回编码错误

    今天用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 // 1. 获取Data
     2     NSURL *postDetailUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", BASEURL, self.topicUrl]];
     3     NSData *postDetailHtmlData = [NSData dataWithContentsOfURL:postDetailUrl];
     4     
     5     // 2. 转码成utf8Data:先转成gb2312, 替换meta, 然后转成utf8
     6     NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
     7     NSString *postHtmlStr = [[NSString alloc] initWithData:postDetailHtmlData encoding:gbkEncoding];
     8 
     9     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">"];
    10     NSData *utf8HtmlData = [uft8HtmlStr dataUsingEncoding:NSUTF8StringEncoding];

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

  • 相关阅读:
    tree
    单向链表反转
    libev使用方法
    PowerManagerService流程分析
    Android source code compile error: “Try increasing heap size with java option '-Xmx<size>'”
    解决git合并冲突问题
    python之字典
    Django----admin管理工具
    流程控制,以及字符串
    python入门
  • 原文地址:https://www.cnblogs.com/feiling/p/4808900.html
Copyright © 2011-2022 走看看