17370845950

如何正确处理 ISO-8859-1 响应中包含西里尔字母的网页编码问题

当使用 requests 获取含西里尔字符(如俄文)的网页时,若响应头未正确声明编码,requests 默认可能误判为 iso-8859-1 或 utf-8,导致乱码;此时应依据网页实际编码(如 windows-1251)显式解码 response.content。

在爬取历史水利数据等老旧网站(如 http://www.cawater-info.net/karadarya/1991/veg1991.htm)时,常见问题并非响应本身是 UTF-8,而是服务端未设置正确的 Content-Type 头,或明确声明为 charset=iso-8859-1,但实际内容以 Windows-1251(即 cp1251)编码存储——该编码广泛用于前苏联国家的俄语网页,能完整表示西里尔字母,而 ISO-8859-1 完全不支持这些字符。

requests.get() 会依据 HTTP 响应头、HTML 标签或默认启发式规则推断 response.encoding,但对这类无规范声明的老站往往失败(例如返回 'ISO-8859-1'),直接访问 response.text 就会产生乱码。

✅ 正确做法是:跳过自动解码,直接操作原始字节 response.content,并用真实编码显式解码

import requests

url = "http://www.cawater-info.net/karadarya/1991/veg1991.htm"
response = requests.get(url)

# ❌ 错误:依赖自动推断的 encoding(通常是 ISO-8859-1,导致乱码)
# print(response.text[:100])

# ✅ 正确:用 cp1251(Windows-1251)解码原始字节
decoded_text = response.content.decode("cp1251")
print(decoded_text[:100])
# 输出:Оперативные данные по водозаборам бассейна реки Карадарья на период вегетации 199</pre><p>? 注意事项:</p>
<ul>
<li>不要对 response.text 再次 .encode()(如 text.encode('utf-8')),这属于“错误解码后的二次编码”,毫无意义且易引发异常;</li>
<li>cp1251 与 windows-1251 等价,Python 的 codecs 模块均支持;</li>
<li>若不确定编码,可先用 chardet.detect(response.content) 初步探测(但对短文本或无 BOM 的 cp1251 文件准确率有限,建议结合网页来源语言经验判断);</li>
<li>对于需要后续解析 HTML 的场景,可将解码后字符串传给 BeautifulSoup(..., from_encoding="cp1251"),或直接传入 r<img src="//public-space.oss-cn-hongkong.aliyucs.com/keji/755.jpg" />esponse.content 并指定 features="html.parser" + from_encoding 参数,避免双重解码。</li>
</ul>
<p>总之,面对老旧俄语网页,放弃 response.text,拥抱 response.content.decode("cp1251"),是解决西里尔字符显示异常最直接、可靠的方式。</p> 
	<!-- 详情页标签输出开始  -->
<div class="xqbq" style="display:none;height:0;overflow: hidden;font-size: 0;">
<p><br>
# <a href="/tags/1501.html"  target="_blank" >windows</a> 
# <a href="/tags/1541.html"  target="_blank" >html</a> 
# <a href="/tags/1546.html"  target="_blank" >编码</a> 
# <a href="/tags/1728.html"  target="_blank" >win</a> 
# <a href="/tags/2009.html"  target="_blank" >字节</a> 
# <a href="/tags/4127.html"  target="_blank" >常见问题</a> 
# <a href="/tags/4176.html"  target="_blank" >python</a> 
# <a href="/tags/4200.html"  target="_blank" >.net</a> 
 
</p>
</div>
<!-- 详情页标签输出结束  -->

<!-- 相关栏目开始 -->
<div class="xglm" style="display:none;height:0;overflow: hidden;font-size: 0;">
<p><br>相关栏目:
    【<a href='/hangye/' class=''>
        行业资讯    </a>】
    【<a href='/net/' class=''>
        网络运营    </a>】
    【<a href='/ai/' class=''>
        GEO优化    </a>】
    【<a href='/yingxiaotuiguang/' class=''>
        营销推广    </a>】
    【<a href='/seo/' class=''>
        SEO优化    </a>】
    【<a href='/jishujiaocheng/' class='on'>
        技术教程    </a>】
    【<a href='/daimazhishi/' class=''>
        代码知识    </a>】
    【<a href='/aituiguang/' class=''>
        AI推广    </a>】
</p>
</div>
<!-- 相关栏目结束 -->
<!-- 随机文章输出开始 -->
<div class="sjwz" style="display:none;height:0;overflow: hidden;font-size: 0;">
<p><br>相关推荐:
<a href='/news/4963.html'>Win11怎么关闭小组件_Win11禁用任务栏天气与小组件方法【设置】</a> 
<a href='/news/7473.html'>Windows如何设置登录时的欢迎屏幕背景?(锁屏界面)</a> 
<a href='/news/7882.html'>Go 中 defer 在 goroutine 内部不生效的原因与执行时机详解</a> 
<a href='/news/7553.html'>LINUX怎么设置系统语言_LINUX修改中文环境</a> 
<a href='/news/5193.html'>php怎么下载安装后无法解析php文件_服务器配置检查【解答】</a> 
<a href='/news/5484.html'>Win11快速助手怎么用_Win11远程协助连接教程【工具】</a> 
<a href='/news/5690.html'>Win11怎么关闭防火墙通知_屏蔽Win11安全中心安全警告弹窗【技巧】</a> 
<a href='/news/7769.html'>Mac的“预览”如何合并多个PDF_Mac文件处理技巧【效率】</a> 
<a href='/news/7966.html'>MAC怎么解压RAR格式文件_MAC第三方解压工具安装与压缩包管理【教程】</a> 
<a href='/news/7935.html'>Win11怎么更改鼠标指针方案_Windows11自定义鼠标光标样式与大小</a> 
<a href='/news/4927.html'>Win11开机Logo怎么换_Win11自定义启动画面工具【高级】</a> 
<a href='/news/6399.html'>php查询数据怎么分组_groupby分组查询配合聚合函数【技巧】</a> 
<a href='/news/8211.html'>如何在Golang中实现RPC异步返回_Golang RPC异步处理与回调方法</a> 
<a href='/news/8699.html'>如何使用Golang encoding/json解析JSON_Golang encoding/json解析与序列化示例</a> 
<a href='/news/7266.html'>Python爬虫项目实战教程_Scrapy抓取与存储数据实例</a> 
<a href='/news/8766.html'>c++怎么操作redis数据库_c++ hiredis库连接与命令执行【实战】</a> 
<a href='/news/8583.html'>如何在Golang中处理云原生事件_使用Event和Notification机制</a> 
<a href='/news/6382.html'>LINUX怎么进行文本内容搜索_Linux grep命令正则表达式用法大全【教程】</a> 
<a href='/news/5008.html'>Win11怎样安装企业微信_Win11安装企业微信教程【步骤】</a> 
<a href='/news/5157.html'>MySQL 中使用 IF 和 CASE 实现查询字段的条件转换</a> 
<a href='/news/6038.html'>小程序里php怎么变mp4_小程序调用php生成mp4视频方法【教程】</a> 
<a href='/news/8322.html'>Windows电脑如何截屏?(四种快捷方法)</a> 
<a href='/news/7885.html'>如何用正则表达式精确匹配最多含一个换行符的起止片段</a> 
<a href='/news/4670.html'>Win11如何更改用户账户文件夹名称 Win11修改C:Users用户名【终极教程】</a> 
<a href='/news/4667.html'>Win11无法拖拽文件到任务栏怎么办_Win11开启拖放功能修复【方法】</a> 
<a href='/news/6273.html'>LINUX下如何配置VLAN虚拟局域网_在LINUX交换机与服务器上的实现</a> 
<a href='/news/4868.html'>c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】</a> 
<a href='/news/5114.html'>本地php环境打开php文件直接下载_浏览器解析php为下载的修复方法【解答】</a> 
<a href='/news/7694.html'>Win10怎样安装PPT模板_Win10安装PPT模板教程【步骤】</a> 
<a href='/news/6058.html'>Mac系统更新下载慢或失败怎么办_解决macOS升级问题【方法】</a> 
<a href='/news/8393.html'>Win11怎么设置虚拟内存_Windows 11优化内存性能提升速度【技巧】</a> 
<a href='/news/6615.html'>Win11怎么关闭内容自适应亮度_Windows11显示设置CABC关闭</a> 
<a href='/news/6648.html'>Win11如何关闭游戏模式 Win11禁用Xbox Game Bar录制【优化】</a> 
<a href='/news/8461.html'>如何使用Golang指针与结构体结合_修改结构体内部字段</a> 
<a href='/news/7888.html'>Go 中实现 Python urllib.quote() 功能的等效方法</a> 
<a href='/news/7006.html'>如何在Golang中实现CI/CD流水线自动化测试_Golang持续集成测试执行方法</a> 
<a href='/news/8218.html'>Python装饰器设计思路_功能增强机制说明【指导】</a> 
<a href='/news/9383.html'>Windows 11怎么关闭OneDrive的桌面备份_Windows 11管理OneDrive文件夹同步</a> 
<a href='/news/5011.html'>Win11怎么关闭系统声音_Win11系统提示音静音设置【详解】</a> 
<a href='/news/6663.html'>PHP主流架构如何做单元测试_工具与流程【详解】</a> 
<a href='/news/6874.html'>Win10文件历史记录怎么用 Win10开启自动备份文件教程【防丢】</a> 
<a href='/news/8078.html'>Win11如何更改任务栏颜色 Win11自定义任务栏背景色【美化】</a> 
<a href='/news/7200.html'>如何使用Golang实现路由分组管理_Golang路由分组与权限控制方法</a> 
<a href='/news/7586.html'>PythonWeb前后端整合项目教程_FastAPIReact完整实例</a> 
<a href='/news/4582.html'>TestNG的testng.xml配置文件怎么写</a> 
<a href='/news/7188.html'>Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】</a> 
<a href='/news/6387.html'>Linux怎么实现内网穿透_Linux安装Frp客户端与服务端配置【方法】</a> 
<a href='/news/6669.html'>Win11时间不对怎么同步_Win11自动校准互联网时间【设置】</a> 
<a href='/news/7162.html'>如何在Golang中处理通道发送接收错误_防止阻塞或panic</a> 
<a href='/news/7189.html'>如何使用Golang匿名函数_快速定义临时函数逻辑</a> 
</p>
</div>
<!-- 随机文章输出结束 -->
            </div>
            <div class="model-dectil-bottom">
              <ul class="model-dectil-chose">
                                <li><a href="/news/458220.html" title="如何让网站的暗色模式复选框跨页面持久化保存状态"> 上一篇 : 如何让网站的暗色模式复选框跨页面持久化保存状态</a></li>
                                <li><a href="/news/458222.html" title="Javascript中的变量提升与暂时性死区是什么?"> 下一篇 : Javascript中的变量提升与暂时性死区是什么?</a></li>
                              </ul>
              <div class="model-dectil-share hidden-xs">
                <div class="bdsharebuttonbox"><a href="#" class="bds_more" data-cmd="more"></a><a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间"></a><a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博"></a><a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博"></a><a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网"></a><a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信"></a></div>
				<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="footer hidden-xs">
  <div class="container">
    <ul class="footNav animated slideInUp wow">
            <li>
        <h3> <a href="/about/">关于我们 </a></h3>
         </li>
            <li>
        <h3> <a href="/service/">服务项目</a></h3>
         <a href="/pinpaisheji/">品牌设计</a>  <a href="/xuanchuanhuabao/">宣传画报 </a>  <a href="/wangzhanjianshe/">网站建设</a>  </li>
            <li>
        <h3> <a href="/ads/">广告推广</a></h3>
         </li>
            <li>
        <h3> <a href="/case/">案例欣赏</a></h3>
         <a href="/shejianli/">设计案例</a>  <a href="/wangzhananli/">网站案例</a>  </li>
          </ul>
    <dl class="footNa rt tc animated slideInUp wow">
      <dt><img src="/uploads/allimg/20250223/1-250223150F4502.jpg" alt=""></dt>
      <dd> 微信扫一扫<br>
        即刻关注我们公众号 </dd>
    </dl>
  </div>
  <div class="container">
    <ul class="link tc animated slideInUp wow">
          </ul>
  </div>
</div>
<div class="copy tc hidden-xs">
  <div class="container"> © <script>document.write( new Date().getFullYear() );</script> 南昌市广照天下广告策划有限公司 版权所有 <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">赣ICP备2024031479号</a><div style="display:none">
<a href="http://edingchen.com">广照天下广告</a>
<a href="http://www.edingchen.com">广照天下广告</a>
<a href="http://cdgjp.com">广照天下广告策划</a>
<a href="http://www.cdgjp.com">广照天下广告策划</a>
<a href="http://jobeople.com">广照天下</a>
<a href="http://www.jobeople.com">广照天下</a>
<a href="http://gztxch.cn">广照天下</a>
<a href="http://www.gztxch.cn">广照天下</a>
<a href="http://irgt.cn">广照天下</a>
<a href="http://www.irgt.cn">广照天下</a>
<a href="http://drorgan.com">广照天下广告策划</a>
<a href="http://www.drorgan.com">广照天下广告策划</a>
<a href="http://51yingcai.com.cn">广照天下广告策划</a>
<a href="http://www.51yingcai.com.cn">广照天下广告策划</a>
<a href="http://gztx8.cn">南昌市广照天下广告策划有限公司</a>
<a href="http://www.gztx8.cn">南昌市广照天下广告策划有限公司</a>
<a href="http://gztx1.cn">南昌市广照天下广告策划有限公司</a>
<a href="http://www.gztx1.cn">南昌市广照天下广告策划有限公司</a>
</div>    <p><a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">赣ICP备2024031479号</a></p>
    <script>$(document).ready(function() { $(".banner_item1").slick({dots:true,infinite: false,arrows:false,autoplay:true,autoplaySpeed:1500 });});</script> 
  </div>
</div>
<div class="copyM tc visible-xs"><div style="display:none">
<a href="http://edingchen.com">广照天下广告</a>
<a href="http://www.edingchen.com">广照天下广告</a>
<a href="http://cdgjp.com">广照天下广告策划</a>
<a href="http://www.cdgjp.com">广照天下广告策划</a>
<a href="http://jobeople.com">广照天下</a>
<a href="http://www.jobeople.com">广照天下</a>
<a href="http://gztxch.cn">广照天下</a>
<a href="http://www.gztxch.cn">广照天下</a>
<a href="http://irgt.cn">广照天下</a>
<a href="http://www.irgt.cn">广照天下</a>
<a href="http://drorgan.com">广照天下广告策划</a>
<a href="http://www.drorgan.com">广照天下广告策划</a>
<a href="http://51yingcai.com.cn">广照天下广告策划</a>
<a href="http://www.51yingcai.com.cn">广照天下广告策划</a>
<a href="http://gztx8.cn">南昌市广照天下广告策划有限公司</a>
<a href="http://www.gztx8.cn">南昌市广照天下广告策划有限公司</a>
<a href="http://gztx1.cn">南昌市广照天下广告策划有限公司</a>
<a href="http://www.gztx1.cn">南昌市广照天下广告策划有限公司</a>
</div>  <p><a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">赣ICP备2024031479号</a></p>
</div>

<!-- 友情链接外链开始 -->
<div class="yqljwl" style="display:none;height:0;overflow: hidden;font-size: 0;">友情链接:
<br>
</div>
<!-- 友情链接外链结束 -->
<!-- 通用统计代码 -->
<div class="tytjdm" style="display:none;height:0;overflow: hidden;font-size: 0;">
<script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js"></script>
<script>LA.init({id:"3LOts1Z6G9mqhKAu",ck:"3LOts1Z6G9mqhKAu"})</script>
</div>
<!-- 通用统计代码 -->

<span id="WzLinks" style="display:none"></span>
<script language="javascript" type="text/javascript" src="//cdn.wzlink.top/wzlinks.js"></script>
<!-- 应用插件标签 start --> 
  
<!-- 应用插件标签 end -->
    </div>
  </div>
</div>
</body>
</html>