比如如下代码:
1 | #test.py |
1 | python test.py |
没关系
1 | python test.py > ques.txt |
会报错
UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa0’ in position 0: illegal multibyte sequence
之后尝试设置环境变量
1 | $env:PYTHONIOENCODING="UTF-8" |
解决问题了,猜测是终端直接走stdio,编码会使用utf-8,但是重定向之后会使用GBK编码的原因。从而导致某些UTF-8的字符在GBK里面无法编码。
也可以直接设置:
1 | import sys |
或者使用
1 | python -X utf8 test.py |
参考python3官方文档的说法可以解释这一现象:

https://docs.python.org/3/library/sys.html
使用一下代码进行测试,会发现重定向的和直接打印的有很大不同:
1 | # -*- coding: utf-8 -*- |
说些什么吧!