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
相关产品推荐
相关产品推荐

