Так работает из консоли винды (непонятно почему кстати, чем print отличается от sys.stdout.write? ), однако если вызывать из консоли eclipse, выдает ERROR: cant display some text...
.......
В каком месте-то падает, и с каким traceback'ом? Сдается мне, что не на моменте unicode(text), а на моменте sys.stdout.write(unicoded_text). Потому что в sys.stdout нужно байты писать, а не символы — и оно пытается привести unicode'ный string к обычному string'у. И наверняка умолчальной кодировкой ANSI.
В общем, нужен traceback.
Здравствуйте, HiSH, Вы писали:
HSH>В каком месте-то падает, и с каким traceback'ом? Сдается мне, что не на моменте unicode(text), а на моменте sys.stdout.write(unicoded_text). Потому что в sys.stdout нужно байты писать, а не символы — и оно пытается привести unicode'ный string к обычному string'у. И наверняка умолчальной кодировкой ANSI. HSH>В общем, нужен traceback.
u = unicode(text)
sys.stdout.write(u)
Traceback (most recent call last):
File "z:\__tools\python26\scons-2.1.0\SCons\Util.py", line 157, in __call__
u = unicode(text)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 8: ordinal not in range(128)
Здравствуйте, enji, Вы писали:
E>Здравствуйте, HiSH, Вы писали:
HSH>>В каком месте-то падает, и с каким traceback'ом? Сдается мне, что не на моменте unicode(text), а на моменте sys.stdout.write(unicoded_text). Потому что в sys.stdout нужно байты писать, а не символы — и оно пытается привести unicode'ный string к обычному string'у. И наверняка умолчальной кодировкой ANSI. HSH>>В общем, нужен traceback.
E>
E>u = unicode(text)
E>sys.stdout.write(u)
E>Traceback (most recent call last):
E> File "z:\__tools\python26\scons-2.1.0\SCons\Util.py", line 157, in __call__
E> u = unicode(text)
E>UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 8: ordinal not in range(128)
E>
E>До write не доходит
Ок, теперь, если кодировка text'а — точно cp1251, и мы напишем u = unicode(text, 'cp1251'), оно должно упасть на следующей строчке, потому что попытаеся сериализовать unicode в string дефолтным конвертором ASCII, и у него это не получится.
Значит, нужно сделать преобразование за него: sys.stdout.write(u.encode("cp1251")). Тогда вопрос — зачем было к юникоду текст приводить? Или локаль консоли — не cp1251? Тогда нужно просто ее правильно выставить во второй строке.
Здравствуйте, HiSH, Вы писали:
HSH>Ок, теперь, если кодировка text'а — точно cp1251, и мы напишем u = unicode(text, 'cp1251'), оно должно упасть на следующей строчке, потому что попытаеся сериализовать unicode в string дефолтным конвертором ASCII, и у него это не получится. HSH>Значит, нужно сделать преобразование за него: sys.stdout.write(u.encode("cp1251")). Тогда вопрос — зачем было к юникоду текст приводить? Или локаль консоли — не cp1251? Тогда нужно просто ее правильно выставить во второй строке.
Вот так заработало: sys.stdout.write(text), без преобразования в unicode. По ходу тестили это дело под никсам, а там юникодная консоль...