Python:常遇见的字符编码问题 TypeError: a bytes-like object is required, not 'str'

最近在写爬虫,执行Python代码时,冷不惊的出现一个字符错误,TypeError: a bytes-like object is required, not 'str'

" 上述错误代码的意思是:字符类型错误:需要传入字节byte类型的,而非字符str类型的 ",所以我们把要传的字符encod()如‘utf-8’转换一下就可以了。

出现这样的问题,其实都是因为我们在处理字符编码时导致的,所以这个问题就变成了bytes和str两种类型转换的问题。

Python中字符类型转换的函数:encode()和decode()

encode():将str字符转换成指定类型(如utf-8)的字节byte;通过是我们向磁盘写文件时,要将str转成encode()字节流,然后write,如写入文件代码示例:

    with open("meijiangmyindex.html","wb") as f:
        f.write(html_page.encode("utf-8"))     
    #html_page是字符str类型,通过write()写入是要传入的是字节byte类型的,所以要通过encode()来转码

decode():将字节bytes变为字符str。通常我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes,如果我们要print或者进行处理操作就要通过decode()转成指定的类型。

    response=opener.open(request)     #请求网络返回的数据,该数据是字节流
    html_page=response.read().decode()     #通过decode()将字节流转换成字符str

灵活通过decode()和encode()转换成我们想要的字符码就可以实现我们想要的字符,记住一个特性:

1.我们向磁盘写文件时,传入的是字节流,要将str转成encode()字节流;

2.我们从网络或磁盘上读取的是字节流,数据是bytes,如果我们在代码要对它做其他操作,就要转成decode() 字符str

猜你喜欢

转载自blog.csdn.net/godot06/article/details/81238098
今日推荐