2015-10-10 2 views
1

Я пытаюсь напечатать символ биткойна Unicode \u2043 в Python 2. Я попытался добавить #-*- coding: utf-8 -*-.Не удается напечатать символ биткойна Unicode в Python 2

$ python2 -c 'print u'\u0243'' 

Поднимает UnicodeEncodeError: 'ascii' codec can't encode character u'\u0243' in position 0: ordinal not in range(128). Однако это делается из оболочки Python.

$ python2 
>>> print u'\u0243' 
Ƀ 

Почему этот код не работает?

bitcoin = u'\u0243' 
quote = u'{:,.2f}'.format(float(val), '.2f') 
print bitcoin, quote 
+1

В сообщении об ошибке сообщается, что ваша терминальная кодировка является ascii и что '\ u0243' не может быть закодирована в ascii. Возможно, установка переменной среды 'PYTHONIOENCODING', например, 'utf-8' помогло бы .. – thebjorn

+0

Я использую Konsole в KDE, и щелкнув по нему правой кнопкой мыши, я вижу, что UTF-8 выбран при просмотре кодировки. Является ли это скорее проблемой bash? http://joelhy.github.io/img/konsole_select_encoding.jpg –

+0

Извините, я не знаю .. Я на окнах, и там unicode и консоль никогда не были друзьями .. – thebjorn

ответ

0

В Unix, если sys.stdout.isatty() возвращает True но sys.stdout.encoding является 'ANSI_X3.4-1968' (ASCII), то вы должны настроить локаль (проверить LANG, LC_CTYPE, LC_ALL envvars) использовать кодировку, не ASCII, если вам нужно печатать не-ASCII персонажи.

Если sys.stdout.isatty() является ложным, тогда настройте PYTHONIOENCODING envvar вне вашего скрипта.
Всегда печатайте Юникод, не кодируйте кодировку символов вашей среды внутри своего скрипта.