解析含西里尔字母网页时请求编码错误,如何解决?
解决requests获取西里尔字母网页编码乱码问题
出现乱码的核心原因是requests自动检测的编码与网页实际编码不匹配,这类包含西里尔字母的网页通常使用Windows-1251编码,以下是两种可行的解决方法:
方法1:手动指定响应编码
直接设置response.encoding为网页实际编码,让requests用正确编码解码字节流:
import requests url = "http://www.cawater-info.net/karadarya/1991/veg1991.htm" response = requests.get(url) # 指定西里尔字母网页常用的Windows-1251编码 response.encoding = 'Windows-1251' print(response.encoding) print(response.text[:100])
方法2:手动解码响应字节内容
跳过requests的自动解码,直接获取响应字节并手动解码:
import requests url = "http://www.cawater-info.net/karadarya/1991/veg1991.htm" response = requests.get(url) # 用Windows-1251编码解码字节内容 content = response.content.decode('Windows-1251') print(content[:100])
为什么之前的尝试无效
你之前先通过response.text获取了已被错误编码解码的Unicode文本,此时再转码相当于对乱码二次处理,自然无法恢复正确内容。必须在解码字节流为文本前,指定正确的编码规则。
确认网页编码的小技巧
如果不确定编码,可以查看网页源码中的meta标签,通常会有类似如下声明:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
从中提取charset的值作为解码编码即可。
内容的提问来源于stack exchange,提问作者Qwerty Qazaq
相关产品推荐
相关产品推荐

