网页编码

最近打算弄弄网站的SEO的相关事情,在最开始碰到了一个比较奇怪的问题,记录一下。
碰到的问题:用python的requests抓取网站,返回乱码。

import requests url = "http://127.0.0.1/a.html" response = requests.get(url=url) print(response.text)

a.html内容
虎虎管家 - 拼多多商品搬家

打印出来的结果

网页编码
文章图片
image.png 乱码!
这个是因为requests的默认编码是 ISO-8859-1,如果指定编码为utf-8,那么可以正确返回结果
response.encoding='utf-8'

但是,requests本身是会基于响应包的头部编码正确设置的,显然是我的网页不够完美,导致需要requests需要强制设置编码。
看了一下返回包的header,果然没有指定编码

网页编码
文章图片
image.png 这就很奇怪了,在代码里面已经定义了charset=utf-8,为什么不能生效呢,浏览器里面看到的是正确的。
【网页编码】原来,这里其实是两个不同的编码(https://www.ibm.com/developerworks/cn/web/wa-lo-ecoding-response-problem/index.html

1)通知浏览器编码:
通过设置这个编码,告诉浏览器该用哪个编码
2)响应编码:
在web-server设置(针对静态资源,后端服务可以在代码里面设置)
所以只需要在nginx的配置里面添加就可以了。
charset utf-8;

    推荐阅读