2016-04-20 2 views
1

У меня возникают проблемы при попытке печати символов, таких как €, ≤, & # x212b ;, Ω, ℃ и т.д., в Python 2.7.11 под для Windows 10. Я ожидал, что работает этот кусок кода из IDLE:Как печатать строки Unicode в оболочке Python 2 под Windows?

print u'\u20AC\u2A7D\u212B\u2126\u2103' 

будет производить следующий вывод на экран:

>>> ================================ RESTART ================================ 
>>> 
€⩽ÅΩ℃ 
>>> 

Но это не так. Вместо этого я получил фанк-строку из символов, отличных от ascii. После борьбы за какое-то время, я, наконец, получил ожидаемый результат, установив переменную окружения:

PYTHONIOENCODING=UTF-8 

До сих пор, так хорошо. Моя проблема заключается в том, что я не могу получить тот же результат с Python оболочки:

>>> print u'\u20AC\u2A7D\u212B\u2126\u2103' 
Ôé¼Ô®¢Ôä½ÔäªÔäâ 
>>> 

Я безуспешно пытался несколько обходных путей, я нашел в ответах на подобные вопросы:

  1. Изменено код страницы от 850 (который по умолчанию в моей системе) к (что соответствует UTF-8 enconding)

  2. обернутый sys.stdout обеспечить соответствующую кодировку

    sys.stdout = codecs.getwriter('utf8')(sys.stdout) 
    
  3. Даже изменилась - хотя он широко рекомендуется - кодировку по умолчанию

    sys.setdefaultencoding("UTF-8") 
    

Ни одно из вышеперечисленного не работал для меня.

Мой вопрос имеет два аспекта:

  • Почему если я бегу print u'\u20AC\u2A7D\u212B\u2126\u2103' от IDLE выход €⩽ÅΩ℃ (как и ожидалось), а если я запускаю этот код с Python оболочки вывод неверен?
  • У кого-нибудь есть советы для правильной печати этих символов из оболочки?

ответ

1

Почему: IDLE использует tkinter, который обертывает инфраструктуру GUI tcl/tk. Tcl/tk использует строки unicode, такие как Python 3, за исключением того, что он ограничен первыми 2 ** 16 символами (Basic Multilingual Plane, BMP). В Windows Python использует командную строку, которая использует кодовые страницы, в основном ограниченные 256 символами. CP65001, похоже, является мошенничеством; присоединиться к большой толпе людей, которые не смогли заставить его работать в течение последнего десятилетия. (Search web for code page 65001.)

Совет: если вы не ограничиваете вывод символов символами в рабочей кодовой странице, используйте IDLE для запуска программы. IDLE имеет опцию запуска -r file.См. Справку Help => IDLE Help, 3.1 Использование командной строки. Обычно я не рекомендую использовать IDLE для запуска уже разработанных программ, но в Windows для вывода BMP.

Смежные вопросы