You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python requests出现UnicodeEncodeError错误的解决方法咨询

解决UnicodeEncodeError写入文件的问题

这个问题在Windows环境下太常见了!核心原因是Python在Windows上默认使用系统的本地编码(比如CP1252或GBK)来写入文件,而不是你期望的UTF-8。哪怕你爬取的网页内容已经是UTF-8编码的字符串,写入时用了默认编码,遇到那些本地编码无法表示的字符就会触发UnicodeEncodeError。

给你几个直接有效的解决方案:

1. 打开文件时显式指定UTF-8编码

这是最根本的解决办法,修改你写入文件的代码,在open()函数里加上encoding='utf-8'参数:

import requests

r = requests.get("你的目标网页URL")
# 直接写入r.text,同时指定编码
with open("output.html", "w", encoding="utf-8") as f:
    f.write(r.text)

这样文件会以UTF-8格式保存,就能容纳所有Unicode字符了,不需要额外处理r.content。

2. 如果仍有特殊字符问题,添加错误处理参数

万一还有极少数无法被UTF-8编码的特殊字符(虽然概率极低),可以加上errors='replace'或errors='ignore'来避免报错:

with open("output.html", "w", encoding="utf-8", errors="replace") as f:
    f.write(r.text)
  • errors='replace':把无法编码的字符替换成�,保留文件完整性
  • errors='ignore':直接忽略无法编码的字符

为什么之前的r.content.decode('utf-8', 'ignore')没用?

因为你只是在读取环节处理了编码,但写入文件时还是用了Windows默认的本地编码,所以问题根源没解决。只要写入时指定UTF-8,直接用r.text就足够了——requests已经帮你把响应内容解码成Unicode字符串了(因为r.encoding是UTF-8)。

额外小提示

如果你用IDLE打开生成的文件,记得确认IDLE的编码设置是UTF-8(IDLE默认可能用系统编码),不然打开文件时可能会乱码。可以通过Options > Configure IDLE > General > Default encoding来修改。

内容的提问来源于stack exchange,提问作者user5621062

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:53:51