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

VS + Python + кириллица, ошибка в консоли, как решить?

Всем привет!
Ради интереса поставил Python 3.5.1 -(решил посмотреть что это за язык, много слышал про него)
Так вот, когда выводишь программу в консоли у меня возникает ошибка, как я понял из-за русского языка и из-за кодировки... Когда пишешь на инглише все норм - конечно можно писать все на нем! и забить на проблему. Но, все-таки мы же русские ) и хочется сообщения писать на своем родном языке.
Погуглил данную тему, у многих людей на многих языках программирования возникает проблема именно из-за русских букв, все решают данную проблему по разному...

Господа! вопрос как решить мою проблему ?
Спасибо.
ccfa8746d7a742d1bf77066a09875e07.jpg
  • Вопрос задан
  • 59318 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 6
@Musgem Автор вопроса
Что удалось нарыть...
А.
если поставить в начале кода такую конструкцию:
# -*- coding: cp1251 -*-
То начинает все работать, как я понял это принудительное перекодирование файла - (буду благодарен если точнее объясните господа)

Б.
(как я понял)
Файл нужно создавать в нужной кодировке utf8
По умолчанию Visual Studio создает файлы в другой кодировки, надо понять где это поменять / проверить / потестить...

Да, все верно! в Visual Studio идем Файл - Дополнительные параметры сохранения
и ставим так(скрин) все начинает работать..
358d87fdaff645d1b289cdadb3266239.jpg8bf2e7537e0e4572aedcc5395f625dd5.jpg

Но это не спасает от такой записи... (скрин) вопрос остается что делать ?
67110686d7914ba5ac982a8e4d684502.jpg

Ради теста, напрямую запустил консоль python - а ввел там нужную команду все норм отобразилось!
Да что не так с этой чертовой VS ?
34d1f4ac38fd47888e93d3d57f4cd19f.jpg
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
в общем случае проблема решения не имеет

длинно можете почитать тут: Странное поведение pycharm?
кратко: запись в базу - пожалуйста, в файл (не помню, надо смотреть), в консоль - увы

это, конечно, если у вас там просто не напутано что-то, что решается encode/decode

ну и, конечно, в байтах - выведет хоть куда
Ответ написан
Как решить мою проблему ?

Использовать Linux, как вариант, в виртуальной машине, и PyCharm.
Ответ написан
@Roman_Kh
Конструкция # -*- coding: cp1251 -*- указывает кодировку самого файла с кодом программы. Поэтому все строки в тексте будут сохранены в кодировке 1251, и если вы выводите в консоль с кодировкой 1251, то все напечатается нормально. Однако если кодировка консоли будет 866 или Unicode, то вместо кириллицы вы получите кракозябры.

Проблема python'а заключается в том, что разные команды/функции почему-то по-разному кодируют/раскодируют строки.
Чтобы с этим справиться, лучше все строки кодировать в Unicode и выводить в Unicode консоль. И использовать только команды с понятным поведением, например, print. Иначе рано или поздно вы снова столкнетесь с кракозябрами.
Ответ написан
@Andy_U
Вот выдержка из документации к Питону 3.5.1:


Python » 3.5.1 Documentation » The Python Standard Library » 29. Python Runtime Services » sys

The character encoding is platform-dependent.

Under Windows, if the stream is interactive (that is, if
its isatty() method returns True), the console codepage is
used, otherwise the ANSI code page.

Under other platforms, the locale encoding is used (see
locale.getpreferredencoding()).

Under all platforms though, you can override this value
by setting the PYTHONIOENCODING environment variable
before starting Python.

When interactive, standard streams are line-buffered. Otherwise,
they are block-buffered like regular text files. You can override
this value with the -u command-line option.


Далее, текущая кодировка консоли в Windows (для России это cp866), ну и строка для ANSI получаются вот так:

import ctypes

    def ansi_encoding():
        return 'cp'+str(ctypes.windll.kernel32.GetACP())

    def console_output_encoding():
        return 'cp'+str(ctypes.windll.kernel32.GetConsoleOutputCP())


Еще может помочь значение sys.stdout.encoding и прочих подобных...

Сделать консоль Windows юникодной можно командой chcp 65001.

Теперь про Pycharm: он устанавливает environment переменную

PYTHONIOENCODING=utf-8

ну и консоль у него юникодная. Шрифт для консоли рекомендую DejaVu Sans Mono - единственный правильно выводит формулы из sympy.

Про то, что текст программы должен быть в utf-8, уже писали. Строчка про encoding не обязательно, но чтобы и питон 2 и питон 3 правильно выводили текст хоть на консоль, хоть в pycharm, программа должна выглядеть так:

# -*- encoding: utf-8 -*-

from __future__ import print_function
import sys

print(sys.version)
print(u'Здравствуй жопа, новый год!')
Ответ написан
@Plamea
ВНИМАНИЕ последнее рабочие решение поставить версию vs 2019 года, проблема с кириллицей пройдет
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы