Python 3: Как указать кодировку стандартного ввода [дубликата]
На этот вопрос уже есть ответ здесь:
Как изменить кодировку STDIN на Python 4 ответаПри переносе кода с Python 2 на Python 3 я сталкиваюсь с этой проблемой при чтении текста UTF-8 из стандартного ввода. В Python 2 это работает нормально:
for line in sys.stdin:
...
Но Python 3 ожидает ASCII отsys.stdin, и если на входе есть символы не ASCII, я получаю ошибку:
UnicodeDecodeError: 'ASCII» кодек можетt декодировать байт .. в позиции ..: порядковый номер не в диапазоне (128)
Для обычного файла я бы указал кодировку при открытии файла:
with open('filename', 'r', encoding='utf-8') as file:
for line in file:
...
Но как я могу указать кодировку для стандартного ввода? Другие SO сообщения (например,Как изменить кодировку STDIN на Python) предложили использовать
input_stream = codecs.getreader('utf-8')(sys.stdin)
for line in input_stream:
...
Тем не менее, это неt работает в Python 3. Я все еще получаю то же сообщение об ошибке. Я'м, используя Ubuntu 12.04.2, и моя локаль установлена на en_US.UTF-8.