首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python 3:如何指定stdin编码?

Python 3:如何指定stdin编码?
EN

Stack Overflow用户
提问于 2018-01-17 05:37:49
回答 1查看 0关注 0票数 0

在将代码从Python 2移植到Python 3时,我在从标准输入读取UTF-8文本时遇到了这个问题。在Python 2中,这很好:

代码语言:javascript
运行
复制
for line in sys.stdin:
    ...

但是Python 3期望ASCII从sys.stdin,如果输入中有非ASCII字符,则会得到错误:

UnicodeDecodeError: 'ascii' codec can't decode byte .. in position ..: ordinal not in range(128)

对于常规文件,我将在打开文件时指定编码:

代码语言:javascript
运行
复制
with open('filename', 'r', encoding='utf-8') as file:
    for line in file:
        ...

但是,如何为标准输入指定编码呢?其他这样的帖子建议使用

代码语言:javascript
运行
复制
input_stream = codecs.getreader('utf-8')(sys.stdin)
for line in input_stream:
    ...

但是,这在Python 3中不起作用,我仍然收到相同的错误消息。我使用的是Ubuntu12.04.2,我的地区设置为en[医]US.UTF-8。

EN

回答 1

Stack Overflow用户

发布于 2018-01-17 14:47:52

代码语言:javascript
运行
复制
import io
import sys

input_stream = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')

或者,设置PYTHONIOENCODING环境变量到运行python时所需的编解码器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档