Задать вопрос

Python: как печатать в cmd.exe и кириллицу, и балтийские символы?

Хочется
а) печатать юникодные символы из Питона в консоль и
б) читать их сразу глазами, без декодера.

Работаю через chcp + PYTHONIOENCODING. И пока что могу успешно распечатать или кириллицу (1251), или балтику (1257), но не вперемешку — тогда выскакивает UnicodeEncodeError. Вобщем-то даже понятно почему не работают все варианты кроме последнего, но вот почему последний не работает, с utf-8, непонятно. Как бы его заработать или по другому получить желаемый результат?

Работаю в FAR/cmd, поэтому хочется чтобы именно под ними всё завелось. Менять сорцы тоже не хочется (но если это вариант вдруг — единственный, пожалуйста, расскажите об этом).

Python 2.7.3, Windows 7

Запускаемый скрипт:

# -*- coding: utf-8 -*-

try:
  print u'Иосиф Кобзон'
except UnicodeEncodeError:
  print 'cannot print cyrillic'

try:
  print u'Eglutės'
except UnicodeEncodeError:
  print 'cannot print baltic'



Лог сессии cmd.exe:

$ chcp 1251  1>nul
$ SET PYTHONIOENCODING=1251
$ python enc.py
Иосиф Кобзон
cannot print baltic

$ chcp 1257  1>nul
$ D:\temp\python-output-encoding>SET PYTHONIOENCODING=windows-1257
$ python enc.py
cannot print cyrillic
Eglutės

$ chcp 65001  1>nul
$ SET PYTHONIOENCODING=utf-8
$ python enc.py
��осиф КобзонTraceback (most recent call last):
  File "enc.py", line 4, in <module>
    print u'Иосиф Кобзон'
IOError: [Errno 2] No such file or directory
  • Вопрос задан
  • 6733 просмотра
Подписаться 6 Оценить 5 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
taliban
@taliban
php программист
Попробуйте запускать через power shell и работайте с utf-8, может выйдет что-то.
Ответ написан
Комментировать
briskly
@briskly
как вариант логировать в файл, а от туда читать, если есть необходимость, то можно читать в динамике для *nix: tail -f log.txt
Ответ написан
demmsnt
@demmsnt
Программист
Это потому, что при старте программы он выясняет в какой кодировке sys.stdout Да ты его меняешь, но он уже считает что там cp866. Поэтому придется делать руками unicode('XYZ', 'cp866').encode('baltic_encoding') и перед вызовами chcp делать через os.system
Хотя подозреваю при этом будут портится уже выведенные знаки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽