网页源码的编码与解码

1. 函数 urlencode()的编码设置方法

 

urlencode(search,encoding='gb2312')   search:字典,不废话了。encoding:+要把编码方式改成的编码方式

 

2.get()返回的response对象设置编码方式

 res=requests.get(url)   res.encoding="gb2312"   把编码方式改变成‘国标2312’

 

3.字符串改变编码形式:

    字符串在Python内部的表示是unicode编码,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘utf-8’),表示将unicode编码的字符串str2转换成utf-8编码。

4.编码和译码: 

字符串在Python内部的表示是unicode编码,而在Python3中文件的传输与存储不能是Unicode编码。在传输的过程中,需要将字符串调用decode()将字符串转换成字节串便于传输,然后在接收端需要再将字节串调用encode()将字节串转换成文本串。

requests.get(url)返回的text文本-内部中文乱码:(将字节串转变成):content.decode(参数:要解码成的编码格式,注意和编码用的编码格式要一致)。。。。  #requests.get(url).content 返回网页源码的字节串形式

出现中文乱码的原因:编码和译码时设置的编码格式不一样,如utf-8用3个字节表示一个字符,gbk用2个字节表示一个字符。如果先用encode('utf-8')转成字节串,再用decode('gbk')再转成字符串就会出现乱码。。。。,各编码方式的字节串是不会相互是别的。
 

4.在网页源代码的头部一般有写网页代码的编码方式,即charset.

5.各编码方式的编码位数:

ASCII 一个英文字符: 8位,一个字节
Unicode 一个英文字符: 32位,4个字节
Unicode 一个中文字符: 32位,4个字节
UTF-8 一个英文字符: 8位,1个字节
UTF-8 一个中文字符: 24位,3个字节
GBK 一个英文字符: 8位,一个字节
GBK 一个中文字符: 16位,2个字节

 

  从上面的表格也可以看出来,Unicode编码太占空间了,所以传输和存储的时候不用Unicode编码方式。

网页源码的编码与解码_第1张图片

 

 

你可能感兴趣的:(爬虫)