Skip to content

Instantly share code, notes, and snippets.

@AlonsoMackenlly
Last active October 17, 2022 06:46
Show Gist options
  • Save AlonsoMackenlly/a8de6053cf2493b68dd1427982f7e6ac to your computer and use it in GitHub Desktop.
Save AlonsoMackenlly/a8de6053cf2493b68dd1427982f7e6ac to your computer and use it in GitHub Desktop.
Устанавливает кодировку принтов в консоли (JetBrains иногда неверно определяет кодировку, из за этого в консоли каракули у кириллицы)
def setup_console(sys_enc="utf-8"):
reload(sys)
try:
# для win32 вызываем системную библиотечную функцию
if sys.platform.startswith("win"):
import ctypes
enc = "cp%d" % ctypes.windll.kernel32.GetOEMCP() #TODO: проверить на win64/python64
else:
# для Linux всё, кажется, есть и так
enc = (sys.stdout.encoding if sys.stdout.isatty() else
sys.stderr.encoding if sys.stderr.isatty() else
sys.getfilesystemencoding() or sys_enc)
# кодировка для sys
sys.setdefaultencoding(sys_enc)
# переопределяем стандартные потоки вывода, если они не перенаправлены
if sys.stdout.isatty() and sys.stdout.encoding != enc:
sys.stdout = codecs.getwriter(enc)(sys.stdout, 'replace')
if sys.stderr.isatty() and sys.stderr.encoding != enc:
sys.stderr = codecs.getwriter(enc)(sys.stderr, 'replace')
except:
pass # Ошибка? Всё равно какая - работаем по-старому...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment