encode:编码
decode:解码
str字符串默认编码为:Unicode
>>> 左侧为编码后的Bytes码,解码为Unicode字符,再被编码为指定的其他格式编码
(注:↑本图片来源"百度图片")
【encoding()】
使用Python打开文件时,文件数据按照文件本身的编码方式转换为字节码,如果这时需要将编码转换,那么我们可以使用encoding()参数来指定转换为的编码格式,如果文件不存在则该参数指定新建文件的编码格式;
被读取的字节码依据Unicode规则被编码为Unicode字符(作为多语言编码合理转换的中介),随后按照转换规则转换为另一种编码(新的字节码);
a = "abcdefg" #字符串默认为Unicode字符
b = a.encode("UTF-8") # b"abcdefg" b表示bytes字节码
GB2312字符集(俗称):
【Unicode解释】
Unicode支持超过一百万种字符。每个字符分配一个编号,称为编码点,不同国家的字符占用指定区域内的一个编码点;
Unicode建立了一个框架并为该框架中的每个区域按照指定规则设计:
不同的区域中存放着不同国家的语言编码,
指定的规则使得各个不同国家的语言能够进行编码的转换,这种规则使得可以将不同的编码再转换为对应的字节码(0/1表示)
例如:
GB2312/UTF-8等编码分别占用了Unicode编码中的指定区域,及一定范围的字节码表示该语言的编码,
该编码在需要被显示时会按照Unicode指定的规则翻译为对应的字节码,随后被集成电路解析在浏览器等显示设备上进行显示
在需要被执行操作时仍然需要Unicode的规则转化为字节码,然后CPU等部件再在对0/1组成的字节码进行运算等操作。
【Spider】
使用requests库发送请求的时候
html = requests.get(url).content.decode("utf-8")
#这里的.content就是读取源文件字节流,随后将该字节流编码为Unicode编码,方便再进行更加精确的解码
html = requests.get(url).text.encode("utf-8")
#text直接读取源文件字节流,后方指定对该字节流的编码方案,这里有时候就会遇到问题,当我们的文件编码是GB2312时,我们encode()使用了UTF-8那就会照成对字节流的编码错误,此时可以通过某些方法查看当前文件的编码再进行指定编码;也可以使用.content将其转换为Unicode编码再对其进行解码,后者较常用。
在使用requests库的时候,需要对get()返回的Response类型进行再次操作:
使用.text是自动根据文本猜测并进行编码,得到的是字符串(对字符串进行编码使用.encode()函数)
使用.content可将Response对象转换为字节码(对字节码进行编码使用.decode()函数)
在进行文件保存的时候
with open(fileName,"wb") as f:
f.write(response.content)
with open("pythonTest.txt","r",encoding="utf-8") as f: #编码的参数放在最后,实际上是对文本中字符串进行的编码
text = f.read()