Вам нужно 3 вещи для печати не-ASCII символов на Python 2.
- Использование
print
- Кодировка терминала должна поддерживать символы.
- Шрифт должен поддерживать символы:
Пример (консоль Windows использует кодовую страницу 437):
C:\>py -2
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> u'\u2018Ralph\u2019' # Didn't use `print`
u'\u2018Ralph\u2019'
>>> print u'\u2018Ralph\u2019' # cp437 doesn't support these characters.
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'\u2018' in position 0: character maps to <undefined>
>>> ^Z
Изменение кодовой страницы на страницу, поддерживающую символы:
C:\>chcp 1252
Active code page: 1252
C:\>py -2
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print u'\u2018Ralph\u2019'
‘Ralph’
Обратите внимание, что последний Python 3 работает по-другому.Кодовая страница не имеет значения (но шрифт имеет значение):
C:\>py -3
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> '\u2018Ralph\u2019'
'‘Ralph’'
>>> print('\u2018Ralph\u2019')
‘Ralph’
>>> print(ascii('\u2018Ralph\u2019')) # Old behavior to see escape codes.
'\u2018Ralph\u2019'