2016-01-12 2 views
0

Я хотел бы попросить вас о помощи. Я должен декодировать unicode decimal для символов, но я не расшифровываю только буквы clasisc, я декодирую специальные символы, такие как: ؋, лв и еще несколько ¥, и это не работает - в нем говорится: кодек charmap не может кодировать персонаж. Вы можете мне помочь?Python - unichr() - кодек 'charmap' не может кодировать символ

Я должен работать со всеми символами валюты с этой страницы: http://www.xe.com/symbols.php, спасибо.

Редактировать: Например, мне нужно получить из десятичного числа 1547 символ «؋».

ответ

1

Это помогает привести пример, подобный приведенному ниже. Это дает четкое представление о рабочей среде (ОС и версии Python):

Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print(unichr(1547)) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\encodings\cp437.py", line 12, in encode 
    return codecs.charmap_encode(input,errors,encoding_map) 
UnicodeEncodeError: 'charmap' codec can't encode character u'\u060b' in position 0: character maps to <undefined> 

Проблема не с преобразованием, но с печатью. В приведенном выше случае консоль Windows использует кодировку cp437, и это не поддерживает печатаемый символ.

Преобразование работает правильно, c содержит символ Юникода, и это AFGHANI SIGN.

>>> c = unichr(1547) 
>>> c 
u'\u060b' 
>>> import unicodedata as ud 
>>> ud.name(c) 
'AFGHANI SIGN' 

Если вы хотите, чтобы правильно напечатать, один из способов заключается в использовании IDE PythonWin из pywin32 расширений, которые поддерживает UTF-8, закодированный выход:

PythonWin 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32. 
Portions Copyright 1994-2008 Mark Hammond - see 'Help/About PythonWin' for further copyright information. 
>>> unichr(1547) 
u'\u060b' 
>>> print(unichr(1547)) 
؋ 

Другой должен написать вывод в UTF-8 кодировке файл и открыть результат в блокноте:

with io.open('out.txt','w',encoding='utf8') as f: 
    f.write(unichr(1547)+unichr(402)+unichr(165)) 

Выходной файл:

؋ƒ¥ 
Смежные вопросы