打印出来的文字乱码怎么办(还有一种可能是由于Accept-Encoding: gzip, deflate, br导致的,还有'Content-Encoding: gzip')

例如:

response = requests.get(url=url,headers=headers)

print(response.encoding)
text = response.text

html = etree.HTML(text)

title = html.xpath("//div[contains(@class,'ppt_tit')]/h1/text()")[0]

  输出的结果为:

ISO-8859-1
一,乱码情况:土建预算员简历模板    和       ÏÂÔØÉùÃ÷

解决的办法有两种:(解决思路,先打印当前的编码类型,为ISO-8859-1,然后就先用ISO-8859-1编码,然后再用decode()来转码,至于使用"utf-8"还是"gbk"得看html里面的编码方式。)

1、

response = requests.get(url=url,headers=headers)

print(response.encoding)
text = response.content.decode('utf-8')  #这里的utf-8是从html代码里面得来的

html = etree.HTML(text)

title = html.xpath("//div[contains(@class,'ppt_tit')]/h1/text()")[0]

  

2、

response = requests.get(url=url,headers=headers)

print(response.encoding)   #得到当前的编码格式
text = response.text

html = etree.HTML(text)

title = html.xpath("//div[contains(@class,'ppt_tit')]/h1/text()")[0]  #这里取到的是乱码的

title = title.encode('ISO-8859-1').decode('utf-8')   #将当前的编码格式转换为前端的编码格式   ,ISO-8859-1是当前的编码格式,前端html里面的编码格式utf-8
title = title.encode('ISO-8859-1').decode('gbk', 'ignore')   #将当前的编码格式转换为前端的编码格式   ,ISO-8859-1是当前的编码格式,前端html里面的编码格式为charset=gb2312

二、乱码情况(

�͋�����I= ) ������T�߽L�td6��G�vJ�����a�B)L�k������}n}���*�T��;��O��|I)$�_W.����랙��{[�6�e6ˎ6t䘈3
����W��)�����Ѫ�G2�������3ӳ$iu �*�8B6 G���rb9
H���R(ub�B�:�ZZl��� � b�ء`���4�Ę����p�k�'��������!tw�� }E{k�~V0Z�A[V�@D�Ѹb�,x��]�h���ӣT�#�� �D�Vm��Ţd�����H�3>fq�ݵ�����<.��1�E.e�755�j+fZ[�u�R&��"���w�3z[���&��*;��[�����_��<�,4{���/�A쵧�m����������ϟL�7}�����c.~yx�����=@M�{��_/M�<y���'���i0��x����O@0d�|��/X���~���8}���?_�^y|��cE|��t���;�<;�᝿~�����W��~?����������~?����#����_0

在设置请求头时有时候不能把浏览器中所有的数据原封不动的都复制,其中“Accept-Encoding:gzip, deflate, br”代表的信息是:“

其实这个头信息是告诉服务器客户端所支持的压缩方式,如果没有这行的话,就是告诉服务器,客户端不支持压缩,要求不压缩直接返回文本。

        因为在请求头中添加了Accept-Encoding: gzip,deflate所以服务器返回的是压缩后的数据,而本地客户端却没有对这些数据进行解压缩因此得到的便是一堆乱码了。解决方案就是去掉Accept-Encoding: gzip,deflate 直接让服务器返回文本”

原文地址:https://www.cnblogs.com/qiaoer1993/p/10619764.html