Модуль кодеков Python предоставляет классы StreamWriter для прозрачного кодирования выходных потоков. Например:
outstream = codecs.getwriter('utf8')(sys.__stdout__)
outstream.write(u'\u2713')
outstream.write(' A-OK!\n') # I want this to fail!
outstream.close()
Однако проблема с StreamWriter по умолчанию заключается в том, что он будет исключать как объекты str, так и объекты Юникода. Если моя программа записывает str в этот поток, это ошибка, и я хочу, чтобы она не сработала! Есть ли способ сделать это без написания моего собственного StreamWriter, который обеспечивает тип написанных объектов?
Кроме того, я не хочу, чтобы мое решение было чувствительным к sys.stdout.encoding
, sys.stdout.isatty()
, locale.getpreferredencoding()
, sys.getfilesystemencoding()
, os.environ["PYTHONIOENCODING"]
или любым другим способам, которыми питон пытается быть умным.