Проблема в том, что при чтении из стандартного ввода, Python декодирует
используется системная кодировка по умолчанию:
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
Ввод, скорее всего, UTF-8 или Windows-CP-1252, поэтому программа
душит не-ASCII-символы.
Чтобы преобразовать sys.stdin в поток с соответствующим декодером, я использовал:
import codecs
char_stream = codecs.getreader("utf-8")(sys.stdin)
Это решило проблему.
Кстати, это метод ANTLRs FileStream, который используется для открытия файла.
с заданным именем файла (вместо заданного потока):
fp = codecs.open(fileName, 'rb', encoding)
try:
data = fp.read()
finally:
fp.close()
КСТАТИ # 2: Для строк я нашел
a_string.encode(encoding)
полезно.