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编码方式。