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