首先明确两个概念:
-
计算机中的编码(encode)==》字符->字节
-
计算机中的解码(decode)==》字节->字符
下面看两个例子:
str="百度" bs=str.encode('gbk') print(bs) print(bs.decode('gbk')) bs=str.encode('utf-8') print(bs) print(bs.decode('utf-8'))
运行结果如下:
显而易见,使用不同的编码方式所耗费的字节数是不同的。比如使用gbk编码一个中文需要使用两个字节。而使用utf-8编码一个中文需要使用三个字节。
目前广泛使用的是Unicode字符集,常用的编码方式是utf-8,关于二者之间的区别和联系可参考字符编码笔记
回到主题:
我们可以使用requests.get(url)
方法得到一个响应。
如果在写入文件时出现乱码,我们不妨看一下该响应的编码方式。
requests.get(url).encoding
一般来说出现乱码的话上面的结果都不会是utf-8
这里假定是gbk,执行下列代码:
with open('data.txt','w',encoding='gbk') as f:
f.write(requests.get(url).text)
打开文件后可能发现中文还是乱码。
这是为什么呢?这是因为我们采用的编码方式虽然是gbk,但是文件解码方式默认可能是utf-8,从而导致中文乱码。
此时将文件的编码方式改为gbk即可。
但是上面的解决方案仍然有不便之处,因为utf-8是一种通用型的编码方式,如果每次打开文件后还要改变编码方式无疑是极其繁琐的。
所以第二种方式就是设置写入文件时的编码方式为utf-8。
with open('data.txt','w',encoding='utf-8') as f:
f.write(requests.get(url).text)
原理与第一种方式相同,这里不再赘述!