Распечатайте символ евро € с помощью модуля python, преобразовав символ юникода u '\ u20ac'

Я пытаюсь напечатать символ валюты с помощью 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
1
0
2 141
2

Ответы 2

Вы можете использовать функцию 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')
€

Спасибо за предложение. Я могу печатать, если изменяю кодовую страницу, поскольку мне нужно использовать python 2.7

mvsz 31.10.2018 15:02

@mvsz Если ответ был полезен, рассмотрите возможность голосования за. Вы также можете принять один ответ как лучший на ваш вопрос.

Mark Tolonen 01.11.2018 15:23

Я пробовал раньше, но это ограничивало меня. Теперь я могу это делать. Выполнено.

mvsz 02.11.2018 07:18

Могу ли я сделать chcp внутри кода Python также для автоматизации шагов?

mvsz 02.11.2018 07:19

@mvsz Проще перейти на python 3, но можно автоматизировать. Задайте еще один вопрос.

Mark Tolonen 03.11.2018 05:43

Есть ли другой способ нормализовать символы юникода вместо изменения кодовой страницы или перехода на python 3? Потому что может возникнуть проблема, если в активированной кодовой странице нет других символов. Если да, я отправлю еще один вопрос по этому поводу.

mvsz 14.11.2018 08:39

@mvsz Большинство кодовых страниц обычно поддерживает только 256 кодовых точек Unicode, за исключением специализированных, таких как японский или китайский. Python 3.6+ поддерживает любую кодовую точку Unicode, которую может отображать терминал, но по-прежнему требует поддержки шрифтов. Поддержка Python 2 прекращается в 2020 году. Переключитесь, если можете.

Mark Tolonen 14.11.2018 10:21

Другие вопросы по теме