Печать символов Юникода на стандартный вывод в python печатает неправильные глифы

Я хочу напечатать набор символов Unicode в моем терминале командной строки. Даже когда я применяю кодировку «UTF-8», терминал печатает какую-то фигню.

$python -c "import sys; print sys.stdout.write(u'\u2044'.encode('UTF-8'))"
ΓüäNone

$python -c "import sys; print sys.stdout.encoding"
cp437

Моя кодировка терминала по умолчанию - cp437, и я пытаюсь это переопределить. Ожидаемый результат - дробная черта (⁄)

http://www.fileformat.info/info/unicode/char/2044/index.htm

Тот же самый фрагмент кода работает безупречно в моем терминале Mac, и он использует UTF-8 в качестве кодировки по умолчанию. Есть ли способ отобразить это и в Windows? Шрифт, который я использую в командной строке Windows, - consolas.

Я хочу, чтобы мой код работал с любыми символами Юникода, а не только с этим конкретным примером, поскольку входные данные являются результатом веб-запроса, и я не могу их контролировать.

 Jonas Schäfer08 сент. 2012 г., 13:27
что-то в затылке говорит мне, что UTF-8 и Windows Terminal не будут работать легко
 Benny08 сент. 2012 г., 14:01
Я уже близок к тому, чтобы сдаться после прохождения этой ошибкиbugs.python.org/issue1602
 jsbueno08 сент. 2012 г., 17:18
Вы можете найти другую терминальную программу для работы вместо Windows или cmd. Я слышал, что можно установить mingw и получить там полуработающий терминал. В противном случае, просто установите виртуальную машину и настройте подходящую среду Linux для наших разработок.

Ответы на вопрос(2)

используемую вашим терминалом; вам придется изменить это где-то еще.

Другими словами, то, что вы заставляете python выводить кодированный в кодировке UTF-8 на терминал, не означает, что ваш терминал волшебным образом начнетпринимать этот вывод как UTF-8, а также.

Терминал Mac OS X уже настроен для работы с UTF-8.

В Windows вы можете переключить кодовую страницу консоли с помощьюchcp команда:

chcp 65001

где 65001 - кодовая страница Windows для UTF-8. ВидетьСимволы Юникода в командной строке Windows - как?

 Martijn Pieters♦08 сент. 2012 г., 14:11
@Benny: Точно, и именно здесь вы должны найти способ заставить свой терминал принимать UTF-8. Еслиdhcp 65001 не работает для вас, плюс переключение шрифта, я не знаю, что будет.
 Martijn Pieters♦08 сент. 2012 г., 13:59
@Benny: почему бы просто не позвонитьprint(u'\u2044')? И чтоsys.stdout.encoding дать тебе?print автоматически закодирует для этой последней кодировки для вас. Связанный вопрос переполнения стека также говорит о необходимости переключения шрифтов для консоли.
 Benny08 сент. 2012 г., 14:04
О, вот где я на самом деле начал, и на этот раз сам Python не мог печатать, поскольку он пытался напечатать символ Unicode, используя кодировку cp437, которая является 8-битной кодовой точкой>>> print(u'\u2044') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python27\lib\encodings\cp437.py", line 12, in encode return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec can't encode character u'\u2044' in position 0: character maps to <undefined>
 Benny08 сент. 2012 г., 13:52
Я только что попробовал это:$chcp 65001 Active code page: 65001 $python -c "import sys; print sys.stdout.write(u'\u2044'.encode('UTF-8'))" ���None
Решение Вопроса

чтобы ожидать отображения текста в кодировке UTF-8.

Python 3.3 утверждает, что поддерживает кодовую страницу 65001 (UTF-8) в Windows.

C:\>chcp 65001
Active code page: 65001

C:\>python
Python 3.3.0rc1 (v3.3.0rc1:8bb5c7bc46ba, Aug 25 2012, 13:50:30) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print('\u2044')
⁄

Хотя глючит

>>> print('\u2044')
⁄

>>> print('\u2044'*8)
⁄⁄⁄⁄⁄⁄⁄⁄
��⁄⁄⁄⁄
⁄⁄
��

>>> print('1\u20442 2\u20443 4\u20445')
1⁄2 2⁄3 4⁄5
⁄5
 Benny09 сент. 2012 г., 07:16
Работал на меня! Большое спасибо!

Ваш ответ на вопрос