Я пытаюсь напечатать символ валюты с помощью Python. Я могу напечатать некоторые символы валюты, нормализовав символ юникода. Поскольку в python 2.7 на карте символов я могу видеть сопоставления только для некоторых символов юникода, а не для символа евро, который является '\ u20ac'.
Чтобы напечатать символ евро, нужно ли включать символы юникода в файл python карты символов?
ИЛИ есть ли другой способ распечатать символ евро?
Я использую приведенный ниже код и получаю сообщение об ошибке ниже.
Выход:
Йен
¥
Евро
Traceback (most recent call last):
File ".\new-test.py", line 8, in <module>
print list1
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'\u20ac' in position 0: character maps to <undefined>
Код:
from __future__ import unicode_literals
import unicodedata
list = ['Yen','\u00a5','Euro',u'\u20ac']
for character in list:
list1 = (unicodedata.normalize("NFKD", character)).strip()
print list1
Вы можете использовать функцию unichr ()
print unichr(8364)
Командная строка Windows настроена на использование кодовой страницы 437 (cp437
), и символ евро не определен в этой кодировке. Вы можете изменить кодовую страницу на 1252, которая поддерживает символ:
C:\>py -2
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:30) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print u'\u20ac'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\dev\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'\u20ac' 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:19:30) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print u'\u20ac'
€
Лучшей альтернативой является переход на Python 3.6 или более поздней версии, который использует API-интерфейсы Windows Unicode для записи непосредственно в консоль, минуя проблемы с кодировкой:
C:\>py -3
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print('\u20ac')
€
@mvsz Если ответ был полезен, рассмотрите возможность голосования за. Вы также можете принять один ответ как лучший на ваш вопрос.
Я пробовал раньше, но это ограничивало меня. Теперь я могу это делать. Выполнено.
Могу ли я сделать chcp внутри кода Python также для автоматизации шагов?
@mvsz Проще перейти на python 3, но можно автоматизировать. Задайте еще один вопрос.
Есть ли другой способ нормализовать символы юникода вместо изменения кодовой страницы или перехода на python 3? Потому что может возникнуть проблема, если в активированной кодовой странице нет других символов. Если да, я отправлю еще один вопрос по этому поводу.
@mvsz Большинство кодовых страниц обычно поддерживает только 256 кодовых точек Unicode, за исключением специализированных, таких как японский или китайский. Python 3.6+ поддерживает любую кодовую точку Unicode, которую может отображать терминал, но по-прежнему требует поддержки шрифтов. Поддержка Python 2 прекращается в 2020 году. Переключитесь, если можете.
Спасибо за предложение. Я могу печатать, если изменяю кодовую страницу, поскольку мне нужно использовать python 2.7