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

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
  • Вопрос задан
  • 6699 просмотров
Подписаться 6 Оценить 5 комментариев
Пригласить эксперта
Ответы на вопрос 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
Хотя подозреваю при этом будут портится уже выведенные знаки.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
02 февр. 2025, в 00:55
2500 руб./за проект
02 февр. 2025, в 00:25
5000 руб./за проект
02 февр. 2025, в 00:18
1000 руб./за проект