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

如何正确配置Python输出编码?sys.stdout.reconfigure报错排查

Python UTF-8输出重定向报错问题解决

问题原因

不是版本问题,sys.stdout.reconfigure(encoding='utf-8')从Python3.7开始就支持,并没有过时。报错是因为Windows系统下,当stdout指向控制台(TTY)时,对应的TTYOutStream对象没有reconfigure方法;只有当stdout指向文件或管道(比如批处理重定向的场景)时,对应的文件流对象才支持reconfigure。

可行解决方案

方案1:直接替换stdout为UTF-8编码流

在脚本开头添加以下代码,强制将stdout设置为UTF-8编码,不管是控制台输出还是重定向都生效:

import sys
sys.stdout = open(sys.stdout.fileno(), mode='w', encoding='utf-8', buffering=1)
  • buffering=1启用行缓冲,避免输出延迟。

方案2:在print时指定编码(Python3.8+)

如果不需要全局修改,也可以直接由Python写入文件,无需依赖批处理重定向:

with open('output.txt', 'w', encoding='utf-8') as f:
    print(解析后的内容, file=f)

方案3:修改批处理的代码页

在批处理文件开头添加一行,将控制台编码设置为UTF-8(代码页65001):

chcp 65001
python your_script.py > output.txt

这样Python会自动使用UTF-8作为stdout的编码,无需修改Python代码。

补充说明

如果脚本需要同时兼容控制台输出和重定向,可以先判断stdout是否为TTY,再选择是否调用reconfigure:

import sys
if not sys.stdout.isatty():
    sys.stdout.reconfigure(encoding='utf-8')

这种情况下,重定向到文件时会生效,控制台运行时不会触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:08:14