关于解码与编码

今天在看书的时候看到编码的时候整个人脑子都被浆糊了一样,感觉真的很烦。上网查过之后现在终于明白编码与解码到底是怎么一回事了。下面请听我娓娓道来。

先看一段代码:

import requests
url = 'http://www.baidu.com'
r = requests.get(url)
text = r.text
print(text)

运行一下发现乱码了:


我的ide是默认编码为utf-8的,那么为什么还会出现乱码呢。原因在于我们的网站时通过gzip压缩过的,所以我们必须先进行解压。说解压前必须了解r.text和r.content之间的区别。

r.text是字符串方式的响应体

r.content是字节方式的响应体

所以当我们用r.text进行输出的时候当然是乱码的,在解压前你是没办法输出中文的。

然而,我们的r.content是可以解压gzip和deflate压缩的,因此我们看下面一段代码

import requests
url = 'http://www.baidu.com'
r = requests.get(url)
text = r.content
print(text)

再运行一下看一下结果:


我们发现变成这样了,那么这些东西是什么呢,其实这些东西都是Unicode编码形式的样子,都是一些十六进制的文本,

也就是说我们通过r.content解压缩后我们的页面变成了Unicode编码了,可是我们的最终目的是输出中文呀,所以我们的最后

一步是进行解码。看一下代码

import requests
url = 'http://www.baidu.com'
r = requests.get(url)
text = r.content
print(text.decode('utf-8'))

其实到这一步的时候,我整个人就懵了,我心想如果要改成中文输出的话不是应该用encode来进行编码吗,怎么是decode,

然后我百思不得其解,遂上网百度了一下,发现了如下两句话。

1.将字符转换为字节的方式称为编码

2.将字节转换为字符的方式称为解码

OK,一切到这里所有疑惑都解决了,原来从一开始我就对这两个词存在着理解上的错误。

decode('utf-8')的意思就是将当前的unicode编码转换成utf-8编码,最后看一下结果


谢谢各位观看。

猜你喜欢

转载自blog.csdn.net/huangguangyourena/article/details/79489565
今日推荐