Python 3里 不能 指望从ASCIIsys.stdin
。它将stdin
以文本模式打开,并对使用的编码进行有根据的猜测。该猜测可能归结为ASCII
,但这不是给定的。请参阅有关如何选择编解码器的sys.stdin
文档。
像在文本模式下打开的其他文件对象一样,该sys.stdin
对象派生自io.TextIOBase
基类;它具有.buffer
指向基础缓冲的IO实例的.raw
属性(该实例又具有一个属性)。
将sys.stdin.buffer
属性包装在新io.TextIOWrapper()
实例中以指定其他编码:
import io
import sys
input_stream = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
或者,在运行python时将PYTHONIOENCODING
环境变量设置为所需的编解码器。
从Python 3.7起,您还可以重新配置现有的std*
包装器,前提是您在一开始就进行了配置(在读取任何数据之前):
# Python 3.7 and newer
sys.stdin.reconfigure(encoding='utf-8')