UnicodeDecodeError:'utf-8'编解码器无法解码位置1中的字节0x8b:无效的起始字节

时间:2016-12-18 07:23:20

标签: python encoding utf-8

我正在尝试通过遵循udacity课程在python中创建一个爬虫。我有这个方法get_page(),它返回页面的内容。

def get_page(url):
    '''
    Open the given url and return the content of the page.
    '''

    data = urlopen(url)
    html = data.read()
    return html.decode('utf8')

原始方法只是返回data.read(),但这样我无法执行str.find()之类的操作。快速搜索后,我发现我需要解码数据。但现在我收到了这个错误

  

UnicodeDecodeError:'utf-8'编解码器无法将字节0x8b解码到位   1:无效的起始字节

我在SO中发现了类似的问题,但没有一个专门用于此。请帮忙。

2 个答案:

答案 0 :(得分:0)

您正在尝试解码无效字符串。

任何有效UTF-8字符串的起始字节必须在0x000x7F的范围内。 所以0x8B肯定是无效的。 来自RFC3629 Section 3

  

在UTF-8中,U + 0000..U + 10FFFF范围(UTF-16可访问范围)中的字符使用1到4个八位字节的序列进行编码。一个“序列”的唯一八位字节的高位设置为0,其余7位用于编码字符编号。

你应该发布你想要解码的字符串。

答案 1 :(得分:0)

可能页面使用其他字符编码进行编码,但'utf-8'。因此起始字节无效。 你可以这样做。

def get_page(self, url):
    if url is None:
        return None
    response=urllib.request.urlopen(url)
    if response.getcode()!=200:
        print("Http code:",response.getcode())
        return None
    else:
        try:
            return response.read().decode('utf-8')
        except:
            return response.read()