-
У меня такая проблема. Использую консоль виндовс cmd.exe, если выводить в нее текст в юникоде через print то все в порядке.
Насколько я знаю, оператор print пытается самостоятельно перекодировать текст в кодировку текущего stdout'a, в моем случае cp886.print u'Привет'
А вот при возбуждении исключений выходит такой косяк.
Как это понимать? Исключения не поддерживают юникод? O_o>>> raise TypeError(u'Привет')
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: <unprintable TypeError object> -
TypeError: unprintable TypeError object
-
Насколько я знаю, оператор print пытается самостоятельно перекодировать текст в кодировку текущего stdout'a
Он не знает кодировки текущего stdout'а. В консоли он берёт кодировку из локали, если я правильно помню. Но вообще, доверять этому неявному поведению не стоит. Если надо что-то выводить, надо сначала явно привести это к байтам.
Исключения не поддерживают юникод? O_o
Можно сказать и так. Это уши всё той же проблемы, что и со всем юникодом в Питоне: по умолчанию кодировка перевода из юникода в байты — us-ascii.
-
Я писал небольшую библиотечку под Ubuntu, там консоль была юникодная и все выводилось без проблем. Теперь запускаю под виндовс и вот засада...
Значит буду переписывать исключения на английский.
Спасибо. -
Так:
raise TypeError(u'Привет'.encode('cp866'))не помогает?
-
Это костыль получается.
-
А задекорировать TypeError таким образом, чтобы она сам кодировал юникодные строчки?
Тоже костыль, но более симпатичный и безболезненный...
-
Мне уже все равно что выводится в консоль. Теперь я все сообщения пишу в лог файл. Практично и сердито.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.


