Django用BeautifulSoup爬虫打印变量报UnicodeEncodeError解决方法
问题原因
抛出UnicodeEncodeError的核心原因是Windows环境下控制台默认使用GBK(charmap)编码输出内容,无法编码你抓取到的网页内容里夹带的\u200e(从左到右标记,是多语种网页常用的不可见双向控制字符),和Django、BeautifulSoup的功能逻辑无关,你没法打印、切片后报错本质都是碰到了这个无法被默认编码识别的特殊字符。
可直接落地的解决方法
- 方案1:清理特殊不可见字符后再操作(最推荐,不影响后续业务逻辑)
遍历内容时先把\u200e这类不可见控制字符移除,再做打印、切片处理即可,参考代码:import re # 匹配常见的网页不可见双向控制字符 control_char_pattern = re.compile(r'[\u200e\u200f\u202a-\u202e]') for x in mylist: # 提取标签内纯文本,如果需要完整标签字符串就用str(x) raw_content = x.get_text(strip=True) # 清理特殊字符 valid_content = control_char_pattern.sub('', raw_content) # 后续打印、切片都不会报错 print(valid_content) print(valid_content[:10]) # 切片操作可正常执行 - 方案2:强制Python标准输出使用UTF-8编码(适合临时调试场景)
在views.py文件最顶部、导入其他依赖之前加如下代码,不用修改原有抓取逻辑:
也可以在启动Django服务前,在Windows终端执行命令临时指定Python输出编码,再启动服务:import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')set PYTHONIOENCODING=utf-8 python manage.py runserver - 方案3:避免直接打印BeautifulSoup的Tag对象
你代码里直接print(x)打印的是完整的标签HTML结构,里面混杂的特殊字符更多,日常开发如果不需要标签结构,优先用.get_text()方法提取纯文本内容再处理,能减少很多编码类问题。
内容的提问来源于stack exchange,提问作者ahmet yılmaz234
相关产品推荐
相关产品推荐

