• 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

  • 相关阅读:
    [文字雲產生器] Tagxedo 把文字串成雲、變成畫,印在 T-Shirt、馬克杯、詩袋….
    python学习(六)
    根据URL地址获取域名
    python学习(五)
    Linux下查看Mysql数据库端口的方法
    python学习(四)
    python学习(三)
    python学习(二)
    Java String删除字符串中间的某部分
    Spring的一个入门例子
  • 原文地址:https://www.cnblogs.com/feiling/p/4808900.html
Copyright © 2020-2023  润新知