美文网首页
抓取的网页内容是gb2312,转换为utf-8

抓取的网页内容是gb2312,转换为utf-8

作者: 晓函 | 来源:发表于2017-01-04 18:41 被阅读238次

    有的网页是gb2312编码,则需要将response.body判断编码,并解码

        #检查编码
        def check_encoding(self,response):
            import chardet
            #
            #detect传入的是bytes
            # 返回{'confidence': 0.99, 'encoding': 'GB2312'}
            # 'encoding': 'utf-8'
            encoding_info = chardet.detect(response.body)
            encoding = encoding_info.get('encoding')
            #非utf-8则解码
            if encoding != 'utf-8':
                # 如果是gb2312,则用gbk来解码,gbk可以解码繁体字以及日文假文等,解码更强
                if encoding.lower()=='gb2312':
                    encoding = 'gbk'
                new_body = response.body.decode(encoding)
                #替换原来的body内容
                response = response.replace(body=new_body)
    
            return response
    

    另外关于gb2312和gbk解码
    问题:UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequence
    原因:Python在做将普通字符串转换为unicode对象时,
    例如:u_string = unicode(string , "gb2312"),如果你的字符串string中有诸如某些繁体字,例如"河滘小学"
    中的滘,那么gb2312作为简体中文编码是不能进行解析的,必须使用国标扩展码gbk,gbk支持繁体中文和日文假文

    解决方法:使用gbk,代替gb2312,例如:u_string = unicode(string , "gbk")

    相关文章

      网友评论

          本文标题:抓取的网页内容是gb2312,转换为utf-8

          本文链接:https://www.haomeiwen.com/subject/lgqavttx.html