Вот выдержка из документации к Питону 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'Здравствуй жопа, новый год!')