如何正确配置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
相关产品推荐
相关产品推荐

