Установить кодировку терминала Python в Windows - PullRequest
1 голос
/ 30 мая 2011

Мне не удалось установить кодировку символов в терминале Python в Windows. Согласно официальному руководству, это кусок пирога:

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

Хорошо, сейчас тестирую:

print 'Русский'

Производит кусок моджибаке. Что я делаю не так?

P.S. IDE - это Visual Studio 2010, если это имеет значение

Ответы [ 4 ]

3 голосов
/ 30 мая 2011

Вы должны использовать Unicode:

print u'Русский'

или переключиться на python3 (Unicode по умолчанию).

2 голосов
/ 30 марта 2015

Создает mojibake, потому что '' является литералом байтовой строки в Python 2 (если не используется from __future__ import unicode_literals).Вы печатаете байты utf-8 (кодирование исходного кода) на консоли Windows, которая использует некоторую другую кодировку символов (кодировка отличается, если вы видите mojibake):

>>> print(u'Русский'.encode('utf-8').decode('cp866'))
╨а╤Г╤Б╤Б╨║╨╕╨╣

Решениедолжен печатать Unicode вместо , как предложил @JBernardo :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print(u'Русский')

Работает, если консольное кодирование поддерживает буквы кириллицы, например, если это cp866.

Есливы хотите перенаправить вывод в файл;Вы можете использовать переменную окружения PYTHONIOENCODING, чтобы установить кодировку символов, используемую Python для ввода-вывода:

Z:\> set PYTHONIOENCODING=utf-8
Z:\> python your_script.py > output.utf-8.txt

Если вы хотите печатать символы Юникода, которые не могут быть представлены в кодировке консоли ( Кодовая страница OEM ), затем вы можете установить win-unicode-console Пакет Python :

Z:\> py -m pip install win_unicode_console
Z:\> py -m run your_script.py
2 голосов
/ 30 мая 2011

Обновление: см. J.F. Ответ Себастьяна для лучшего объяснения и лучшего решения.

# -*- coding: utf-8 -*- устанавливает кодировку исходного файла, а не кодировку вывода.

Вы должны закодировать строку непосредственно перед печатью, используя ту же самую кодировку, которую использует ваш терминал. В вашем случае, я предполагаю, что ваша кодовая страница - кириллица (cp866). Таким образом,

print 'Русский'.encode("cp866")
0 голосов
/ 30 марта 2015

В случае, если кто-то еще получает эту страницу при поиске проще всего установить кодовую страницу терминала windows

CHCP 65001

или для Power Shell запустите его с

powershell.exe -NoExit /c "chcp.com 65001"

из Существует ли командная оболочка Windows, которая будет отображать символы Юникода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...